考虑下面的例子
class test<E>{
public int getNum(int i){
return i;
}
public E getNum1(E i){
return i;
}
public static <E> E getNum(E i){
return i;
}
}
第一种方法声明:返回类型已知
第二种方法声明:返回类型有些未知
第三种方法声明:返回类型未知 + 静态
问题:静态方法用于泛型时,<E>
必须指定类型参数。为什么会这样?或者类型参数到底是什么意思,它的目的是什么?当方法是非静态的时,我们没有类型参数,尽管在这种情况下我们<E>
在类声明中,例如public class <E> {...}
在通配符上考虑这个
//This does not compile, how to make it correct
public static getIndex(List<?>, int index){
return list.get(index);
}
public static <E> E getIndex1(List<E> list, int index){
return list.get(index);
}
同样,第一种方法无法编译。我不知道如何使用无界通配符作为返回类型使其编译
上面的两种方法声明有什么区别?
通配符?
表示任何类型并E
表示某些未知类型。
既然any type
是some unknown type
正确的,那又有什么关系呢?