Обобщения Java - параметр ссылочного типа параметра типа - PullRequest
0 голосов
/ 06 февраля 2019

Допустим, у меня есть два интерфейса, 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, нам требуется дополнительный параметр.Есть ли способ обойти это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...