假设我有两个界面,Foo和Bar:
interface Foo<T extends Bar<U>, U> {
T getBar();
default U get() {
return getBar().get();
}
}
interface Bar<U> {
U get();
}
实现如下所示:
class BarImpl implements Bar<String> {
@Override
String get() {
return "bar";
}
}
class FooImpl implements Foo<BarImpl, String> { // Specifying String here is redundant, we know that BarImpl implements Bar<String>
@Override
public BarImpl getBar() {
return new BarImpl();
}
}
理想情况下,Foo
可以仅使用一个指定的类型参数(T
)进行定义,并且可以推断U
,因此FooImpl的声明可以简单地为class FooImpl implements Foo<BarImpl>
。但是,在这一点上,为了使我们可以在U
界面中使用Foo
,我们需要一个辅助参数。有什么办法解决吗?