我有以下界面:

public interface Box<T> {
    T get();
}


我希望能够定义另一个具有Box<SomeType>作为参数的接口,但要使该接口“知道” SomeType是什么。

例如我想定义以下接口

// this doesn't compile
public interface BiggerBox<B extends Box<H>> {
    H get();
}


想法是您可以执行以下操作:

BiggerBox<Box<String>> biggerBox = new SomeBiggerBox(new SomeBox("some string"));
String value = biggerBox.get();


我最接近的是:

public interface BiggerBox<B extends Box> {
    <U> U get();
}


但这没有编译时类型的安全性。

我认为这在Java中是不可能的,但是我想知道是否可以(甚至通过疯狂的黑客攻击)。

编辑:我不想向接口添加第二个类型参数,即没有BiggerBox<Box<String>, String>(这就是为什么我认为不可能)

最佳答案

您需要添加它作为第二个类型参数:

public interface BiggerBox<B extends Box<H>, H> {
    H get();
}

09-25 20:53