我想检查泛型类的实例化类型是否具有某些属性,例如:
class Foo<T> {
void bar () {
if (T instanceof Serializable) // does not compile
...
}
}
我想知道通用信息在运行时是否完全丢失了?这是否意味着没有办法完成我想做的事情?
答案 0 :(得分:6)
这是否意味着没有办法完成我想做的事情?
你可以写:
class Foo<T> {
private final Class<T> clazz;
Foo (final Class<T> clazz) { // require creator to supply a Class<T>
this.clazz = clazz;
if (clazz == null) {
throw new NullPointerException();
}
}
void bar () {
if (Serializable.class.isAssignableFrom(clazz)) {
...
}
}
}
答案 1 :(得分:2)
你是对的,generic type information
在运行时丢失了。它被称为Type Erasure。编译器将删除所有泛型类型并在运行时执行强制转换(如有必要)。和所有