我有三节课:
class ClassR {}
class ClassA<T extends ClassR>{}
class ClassB<E extends ClassA<T extends ClassR>> extends ClassA<T> {
void foo(T param) {
}
void bar(E param) {
}
}
除非将其更改为第三类,否则它不会编译
class ClassB<E extends ClassA<T>, T extends ClassR> extends ClassA<T> {
void foo(T bar) {
}
void bar(E param) {
}
}
有没有办法在创建ClassB时仅保留我需要传递的E参数,并推断出T?例如,使用起来会很方便:
new ClassB<ClassA<ClassR>>()
代替:
new ClassB<ClassA<ClassR>, ClassR>()
最佳答案
这种更简单的方法可能对您有用:
class ClassR {}
class ClassA<T extends ClassR>{}
class ClassB<T extends ClassR> extends ClassA<T> {
void foo(T bar) {
}
void bar(ClassA<T> param) {
}
}
然后用法将绕过对
ClassA
的任何引用变为:class SubR extends ClassR {}
ClassB<SubR> obj = new ClassB<SubR>();
关于java - 嵌套扩展泛型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31344504/