Можно ли указать метод, который возвращает объект, реализующий два или несколько интерфейсов?
Скажем, у нас есть следующие интерфейсы:
interface FooBar {
[Foo] & [Bar] getFooBar();
}
interface Foo {
void doFoo();
}
inteface Bar {
void doBar();
}
Реализации FooBar должны предоставить метод getFooBar(), который возвращает экземпляр типа fullfills Foo, а также Bar.
То, что я пробовал до сих пор, это сделать с помощью дженериков:
interface FooBar {
<T extends Foo & Bar> T getFooBar()
}
class SomeImplementor implements FooBar {
private FooAndBarImpl fSomeField;
public <T extends Foo & Bar> T getFooBar() {
return fSomeField;
}
}
Учитывая, что FooAndBarImpl - это некоторый тип, предоставляемый каркасом или библиотекой и реализующий Foo и Bar, это, я думаю, должно работать. Однако это не так, потому что "FooAndBarImpl не может быть преобразован в T". Почему это? Контракт, подразумеваемый getFooBar(), не разбит, как я его вижу.
Другим решением было бы определить новый интерфейс, который расширяет Foo и Bar, и использовать это как возвращаемый тип. Я просто не вижу смысла возвращать пустую оболочку для fSomeField в реализации getFooBar().
Спасибо за любые другие советы и/или объяснения.
EDIT:
Был бы признателен, если бы кто-нибудь мог объяснить, почему подход дженериков не работает. Я просто этого не вижу.