【发布时间】:2015-06-16 06:16:14
【问题描述】:
我在我的一堂课中使用泛型时遇到问题。这些是我的课程:
public interface InterE<PK> {}
public interface Inter2<O extends ClassO, P extends ClassP> {}
public class ClassU<O extends ClassO, P extends ClassP> implements InterE<Long> {}
public class ClassP {}
public class ClassO {}
public class Class1<PK, T extends InterE<PK>> {
public Class1 (Class<T> clazz) {}
}
public class Class2<O extends ClassO, P extends ClassP> extends Class1<Long, ClassU<O, P>> implements Inter2<O, P> {
public Class2 () {
//old constructor
//super(ClassU.class);
//new - here is problem
super(ClassU<O, P>.class);
}
}
如果 ClassU 不使用泛型,那么 Class2 中的旧构造函数可以正常工作,但我需要在 ClassU 中使用泛型,所以我在 Class2 中调用超级构造函数有问题。
【问题讨论】:
-
以“旧”方式使用构造函数时究竟会发生什么?
-
@serg.nechaev 不完全是,他不是在寻找
O.class或P.class。 -
旧方式有编译错误 - 构造函数 Class1
>(Class ) 未定义 -
可能没有安全的方法绕过它,但您可以使用不安全的双重强制转换:
super((Class<ClassU<O, P>>)(Class)ClassU.class)。见这里stackoverflow.com/questions/7502243/…