Как сделать класс Java, который реализует один интерфейс с двумя универсальными типами?

У меня общий интерфейс

public interface Consumer<E> {
    public void consume(E e);
}

У меня есть класс, который использует два типа объектов, поэтому я хотел бы сделать что-то вроде:

public class TwoTypesConsumer implements Consumer<Tomato>, Consumer<Apple>
{
   public void consume(Tomato t) {  .....  }
   public void consume(Apple a) { ...... }
}

Видимо, я не могу этого сделать.

Конечно, я могу осуществить отправку самостоятельно, например,

public class TwoTypesConsumer implements Consumer<Object> {
   public void consume(Object o) {
      if (o instanceof Tomato) { ..... }
      else if (o instanceof Apple) { ..... }
      else { throw new IllegalArgumentException(...) }
   }
}

Но я ищу решение для проверки и диспетчеризации типов во время компиляции, которое предоставляют дженерики.

Лучшее решение, которое я могу придумать, - это определить отдельные интерфейсы, например,

public interface AppleConsumer {
   public void consume(Apple a);
}

Функционально, это решение хорошо, я думаю. Это просто многословно и безобразно.

Есть идеи?

Ответы на вопрос(8)

Ваш ответ на вопрос