我在使用泛型时遇到了麻烦。给出以下示例:
class A<T> {
public A(Class<T> myType){
}
}
class B<E> extends A<Collection<E>> {
public B(Class<E> myEType){
super(???);
}
}
什么???应该 ?
Collection.class
没有工作......
Collection<E>.class
也没有。
(Class<Collection<E>>)Collection.class
不起作用......
如果有一个java generics guru,我需要帮助......:/
答案 0 :(得分:9)
由于类型擦除,除了Class<Collection<E>>
之外,你不可能获得Collection.class
。您必须使用不安全的强制转换来将Collection.class
投射到Class<Collection<E>>
- 具体而言,(Class<Collection<E>>) (Class) Collection.class
将完成此任务。
答案 1 :(得分:1)
class A<T> {
public A(Class<T> myType){
}
}
class B<E> extends A<Collection<E>> {
public B(Class<Collection<E>> myEType){ // <-- this is the changed line
super(myEType);
}
}
答案 2 :(得分:0)
试试这个:
class A<T> {
public A(Class<?> myType){
}
}
class B<E> extends A<Collection<E>> {
public B(Class<E> myEType){
super(myEType);
}
}
如果满意,请将此答案标记为正确。