¿Cómo hacer una clase Java que implemente una interfaz con dos tipos genéricos?

Tengo una interfaz genérica

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

Tengo una clase que consume dos tipos de objetos, por lo que me gustaría hacer algo como:

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

Aparentemente no puedo hacer eso.

Por supuesto, puedo implementar el envío yo mismo, por ejemplo.

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

Pero estoy buscando la solución de envío y verificación de tipos en tiempo de compilación que brindan los genéricos.

La mejor solución que se me ocurre es definir interfaces separadas, por ejemplo,

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

Funcionalmente, esta solución está bien, creo. Es solo verboso y feo.

¿Algunas ideas?

Respuestas a la pregunta(8)

Su respuesta a la pregunta