1

我怎样才能返回Class<Collection<G>>,其中 G 是通用的?

  public Class<Collection<G>> getType() {
    return (Class<Collection<G>>)Collection.class; // This is wrong
  }
4

1 回答 1

1

由于Collection.class是 raw Collection( Class<Collection>) 类,它不是Class<Collection<G>>. 让演员表工作的一种选择是向上Class<?>转换到然后向下转换到Class<Collection<G>>. 这是可行的,因为您始终可以向上转换为超类型,然后向下转换是未经检查的转换,在这种情况下,它永远不会在运行时抛出异常。

对于泛型部分,您将需要一个声明泛型类型参数的泛型方法G

@SuppressWarnings("unchecked")
public <G> Class<Collection<G>> getType() {
    return (Class<Collection<G>>)(Class<?>)Collection.class;
}
于 2013-09-26T08:27:43.923 回答