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?

questionAnswers(8)

yourAnswerToTheQuestion