Java泛型 - 命名实际类型的实际类型

时间:2013-08-20 15:26:33

标签: java generics reference

给定像这样的界面

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返回的。

怎么做?

1 个答案:

答案 0 :(得分:3)

您需要第二个通用参数:

public interface MyInterface2<U estends MyAbstractClass, T extends MyInterface1<U>> {
    U returnInstanceOfMyClass();
}
相关问题