【发布时间】:2012-02-03 05:55:26
【问题描述】:
Eclipse 表示由于泛型类型橡皮擦,Type Parameter 不允许使用 instanceof 操作。
我同意在运行时不会保留任何类型信息。但请考虑以下类的通用声明:
class SomeClass<T>{
T t;
SomeClass(Object o){
System.out.println(o instanceof T); // Illegal
}
}
在运行时,不会出现 T!但是如果我实例化这个Integer类型的类,那么对应的对象就会有一个Integer类型的字段t。
那么,为什么我不能用 T 检查变量的类型,它可以在运行时被 Integer 替换。我实际上会做类似“o instanceof Integer”之类的事情。
在哪些情况下,允许带有类型参数的instanceof会引起麻烦,从而被禁止?
【问题讨论】:
-
您已经说过“在运行时,不会出现 T”,所以听起来您已经意识到 类型擦除。所以我不确定你为什么对这种行为感到困惑?
-
不被允许不代表会造成卢布。 T 是一个泛型类型,实际上可以是任何东西,使用它 instanceof 没有任何意义。
标签: java generics instanceof type-parameter