История изменений
Исправление r--r--r--, (текущая версия) :
Возьми мой пример на Go и попробуй точно так же реализовать его на Java - получишь отражение проблемы.
нужна реализация двух интерфейсов в одном классе
Перечитай самый первый пример с LinkedList или пример на Go
Ну, хорошо. Возьмём пример на Go.
Вот как выглядит его версия на яве, где впендюрили общий интерфейс, хотя он вроде тут уже опционален:
class BeepBoopImpl <T extends Beep & Boop> implements BeepBoop {
private T impl;
public void beep() {
impl.beep();
}
public void boop() {
impl.boop();
}
public BeepBoopImpl(T impl) {
this.impl = impl;
}
}
public void main(String[] args) {
Impl1 impl = new Impl1();
BeepBoop b1 = new BeepBoopImpl<>(impl);
foo(b1);
Impl2 imp2 = new Impl2();
BeepBoop b2 = new BeepBoopImpl<>(imp2);
foo(b2);
}
interface BeepBoop extends Beep, Boop {
}
// emulates injection
static void foo(BeepBoop bb) {
bb.beep();
bb.boop();
}
// normally in a 3rd party library that doesn't know interface BeepBoop
interface Beep {
void beep();
}
interface Boop {
void boop();
}
class Impl1 implements Beep, Boop {
@Override
public void beep() {
System.out.println("Impl1 beep.");
}
@Override
public void boop() {
System.out.println("Impl1 boop.");
}
}
class Impl2 implements Beep, Boop {
@Override
public void beep() {
System.out.println("Impl2 beep.");
}
@Override
public void boop() {
System.out.println("Impl2 boop.");
}
}
В чём тут проблема с явой?
Исходная версия r--r--r--, :
Перечитай самый первый пример с LinkedList или пример на Go
Ну, хорошо. Возьмём пример на Go.
Вот как выглядит его версия на яве, где впендюрили общий интерфейс, хотя он вроде тут уже опционален:
class BeepBoopImpl <T extends Beep & Boop> implements BeepBoop {
private T impl;
public void beep() {
impl.beep();
}
public void boop() {
impl.boop();
}
public BeepBoopImpl(T impl) {
this.impl = impl;
}
}
public void main(String[] args) {
Impl1 impl = new Impl1();
BeepBoop b1 = new BeepBoopImpl<>(impl);
foo(b1);
Impl2 imp2 = new Impl2();
BeepBoop b2 = new BeepBoopImpl<>(imp2);
foo(b2);
}
interface BeepBoop extends Beep, Boop {
}
// emulates injection
static void foo(BeepBoop bb) {
bb.beep();
bb.boop();
}
// normally in a 3rd party library that doesn't know interface BeepBoop
interface Beep {
void beep();
}
interface Boop {
void boop();
}
class Impl1 implements Beep, Boop {
@Override
public void beep() {
System.out.println("Impl1 beep.");
}
@Override
public void boop() {
System.out.println("Impl1 boop.");
}
}
class Impl2 implements Beep, Boop {
@Override
public void beep() {
System.out.println("Impl2 beep.");
}
@Override
public void boop() {
System.out.println("Impl2 boop.");
}
}
В чём тут проблема с явой?