Jak zrobić klasę Java, która implementuje jeden interfejs z dwoma rodzajami ogólnymi?
Mam ogólny interfejs
public interface Consumer<E> {
public void consume(E e);
}
Mam klasę, która pochłania dwa typy obiektów, więc chciałbym zrobić coś takiego:
public class TwoTypesConsumer implements Consumer<Tomato>, Consumer<Apple>
{
public void consume(Tomato t) { ..... }
public void consume(Apple a) { ...... }
}
Najwyraźniej nie mogę tego zrobić.
Oczywiście mogę sam wdrożyć wysyłkę, np.
public class TwoTypesConsumer implements Consumer<Object> {
public void consume(Object o) {
if (o instanceof Tomato) { ..... }
else if (o instanceof Apple) { ..... }
else { throw new IllegalArgumentException(...) }
}
}
Ale szukam rozwiązania do sprawdzania typu i kompilacji w czasie kompilacji, które zapewniają produkty generyczne.
Najlepszym rozwiązaniem, jakie myślę, jest zdefiniowanie oddzielnych interfejsów, np.
public interface AppleConsumer {
public void consume(Apple a);
}
Funkcjonalnie, myślę, że to rozwiązanie jest w porządku. To tylko gadatliwe i brzydkie.
Jakieś pomysły?