我有以下界面:
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();
}