0

我想检查泛型类的实例化类型是否具有某些属性,例如:

class Foo<T> {
  void bar () { 
    if (T instanceof Serializable)   // does not compile
      ...
  } 
}

我想知道通用信息是否在运行时完全丢失?这是否意味着没有办法完成我想做的事情?

4

2 回答 2

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)) {
      ...
    }
  } 
}
于 2013-02-23T20:47:11.860 回答
2

你是对的,generic type information在运行时丢失了。它被称为类型擦除。编译器将删除所有泛型类型并在运行时进行强制转换(如有必要)。和所有的

于 2013-02-23T20:42:42.800 回答