1)我想知道为什么泛型方法和类不带 super 关键字,尽管扩展被接受?
2)由于类型擦除,我们不能将运算符的实例与泛型一起使用,但是为什么允许类型转换?
例如:
if (objecta instanceof Object){} //doesn't work
Collection collection = new ArrayList();
Collection<Integer> d1 = (Collection<Integer>)collection; //works fine.
根据我的理解,它不应该是因为我们试图将它转换为 Collection 并且在运行时没有 Collection 。
3)我读过静态变量不能是泛型类的成员,但我不太清楚为什么。为什么会显示以下行为?
public class NoGenericss
{ static List<Integer> list; //WORKS FINE
static List<T> list1; //COMPILATION ERROR
public class Genericss<T>
{ static List<Integer> list; //WORKS FINE
static List<T> list1; //COMPILATION ERROR
static void meth(T t){} //COMPILATION ERROR
static <S> void meth(S t){} //WORKS FINE
为什么会出现这种可变行为?