问题1:
import java.util.*;
public class a{
public static Object get0(List list){
return list.get(0);
}问下面哪一个声明能正确编译?选3个
A.Object o=a.get0(new LinkedList());
B.Object o=a.get0(new LinkedList<?>());
C.String s=a.get0(new LinkedList<String>());
D.Object o=a.get0(new LinkedList<Object>());
E.String s=(String)a.get0(new LinkedList<String>());先做做答案,再告诉我为什么,谢谢!问题2:
关于泛型,我总结出2条规则:等号右边不能用通配符(?)!
集合之前的尖括号里不能用通配符。在创建泛型类或方法时,不要用通配符。但我不明白为什么,请解释哦!
问题3:
看下面一条声明语句:
public static <E extends Number> List <? super E> process(List<E> nums){}List之后的尖括号是一个泛型,表明了List的类型,那List之前的那个尖括号表明什么意思呢?为什么List前后有两个泛型修饰它呢?
希望各位帮忙教教我,祝大家万事如意!!
谢谢!

解决方案 »

  1.   

    ============================================
    问题1:
    import java.util.*;
    public class a{
    public static Object get0(List list){
    return list.get(0);
    }问下面哪一个声明能正确编译?选3个
    A.Object o=a.get0(new LinkedList());
    B.Object o=a.get0(new LinkedList<?>());
    C.String s=a.get0(new LinkedList<String>());
    D.Object o=a.get0(new LinkedList<Object>());
    E.String s=(String)a.get0(new LinkedList<String>());
    先做做答案,再告诉我为什么,谢谢!
    =====================================================ADE,B中new LinkedList<?>()未指明类型,将无法new;C中s为String,右边得到结果为Object,类型不符========================================================================
    问题2:
    关于泛型,我总结出2条规则:
    等号右边不能用通配符(?)!
    集合之前的尖括号里不能用通配符。在创建泛型类或方法时,不要用通配符。但我不明白为什么,请解释哦!
    ========================================================================
    不是不可以用通配符,如<? extends E>表示E的子类啊=============================================================================
    问题3:
    看下面一条声明语句:
    public static <E extends Number> List <? super E> process(List<E> nums){}List之后的尖括号是一个泛型,表明了List的类型,那List之前的那个尖括号表明什么意思呢?为什么List前后有两个泛型修饰它呢?
    ==============================================================================
    前面<E extends Number>表示E的类型,即函数process(**),参数为类型为E的List,返回值为类型E的父类(Number)的List
      

  2.   

    ============================================
    问题1:
    import java.util.*;
    public class a{
    public static Object get0(List list){
    return list.get(0);
    }问下面哪一个声明能正确编译?选3个
    A.Object o=a.get0(new LinkedList());
    B.Object o=a.get0(new LinkedList<?>());
    C.String s=a.get0(new LinkedList<String>());
    D.Object o=a.get0(new LinkedList<Object>());
    E.String s=(String)a.get0(new LinkedList<String>());
    先做做答案,再告诉我为什么,谢谢!
    =====================================================ADE,B中new LinkedList<?>()未指明类型,将无法new;C中s为String,右边得到结果为Object,类型不符========================================================================
    问题2:
    关于泛型,我总结出2条规则:
    等号右边不能用通配符(?)!
    集合之前的尖括号里不能用通配符。在创建泛型类或方法时,不要用通配符。但我不明白为什么,请解释哦!
    ========================================================================
    不是不可以用通配符,如<? extends E>表示E的子类啊=============================================================================
    问题3:
    看下面一条声明语句:
    public static <E extends Number> List <? super E> process(List<E> nums){}List之后的尖括号是一个泛型,表明了List的类型,那List之前的那个尖括号表明什么意思呢?为什么List前后有两个泛型修饰它呢?
    ==============================================================================
    前面<E extends Number>表示E的类型,即函数process(**),参数为类型为E的List,返回值为类型E的父类(Number)的List这个答案很好。