Java泛型-类型参数的引用类型参数

时间:2019-02-06 01:06:26

标签: java oop generics

假设我有两个界面,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,我们需要一个辅助参数。有什么办法解决吗?

0 个答案:

没有答案