0

给定这样的接口

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

怎么做?

4

1 回答 1

3

您需要第二个通用参数:

public interface MyInterface2<U estends MyAbstractClass, T extends MyInterface1<U>> {
    U returnInstanceOfMyClass();
}
于 2013-08-20T15:30:04.663 回答