给定像这样的界面
public interface MyInterface1<T extends MyAbstractClass> {
...
}
我想创建另一个接口MyInterface2,将MyInterface1作为泛型类型,在MyInterface2中我想引用实际MyInterface1的实际类型
public interface MyInterface2<INTERFACE extends MyInterface1<MYCLASS>> {
MYCLASS returnInstanceOfMyClass();
}
所以我想说方法“returnInstanceOfMyClass”返回给MyInterface2的实际MyInterface1的实际T。
问题是我不允许写下面的内容
public interface MyInterface2<INTERFACE extends MyInterface1<MYCLASS>> {
我被允许写
public interface MyInterface2<INTERFACE extends MyInterface1<?>> {
但是我无法在MyInterface2中的方法签名中引用MyInterface1中的实际T类型 - 因为我在引用时没有给它使用任何名称。
我希望能够以类型安全的方式执行以下操作
class MyClass extends MyAbstractClass {
...
}
MyClass c = new MyInterface2<MyInterface1<MyClass>>.returnInstanceOfMyClass();
不需要转换到MyClass,因为它可以看到给MyInterface2的MyInterface1的实际类是MyClass,这是从returnInstanceOfMyClass返回的。
怎么做?
答案 0 :(得分:3)
您需要第二个通用参数:
public interface MyInterface2<U estends MyAbstractClass, T extends MyInterface1<U>> {
U returnInstanceOfMyClass();
}