我有三节课:

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/

10-08 21:48