¿Cómo implementar el patrón de fábrica con genéricos en Java?

Tengo una interfaz genéricaManipulador

public interface Handler<T> {
  void handle(T obj);
}

Puedo tener n implementaciones de esta interfaz. Digamos que tengo las siguientes 2 implementaciones por ahora. Uno que maneja objetos String y otro maneja Fecha

public class StringHandler implements Handler<String> {
  @Override
  public void handle(String str) {
    System.out.println(str);
  }
}

public class DateHandler implements Handler<Date> {
  @Override
  public void handle(Date date) {
    System.out.println(date);
  }
}

Quiero escribir una fábrica que devolverá instancias de controlador basadas en el tipo de clase. Algo como esto :

class HandlerFactory {
  public <T> Handler<T> getHandler(Class<T> clazz) {
    if (clazz == String.class) return new StringHandler();
    if (clazz == Date.class) return new DateHandler();
  }
}

Recibo el siguiente error en esta fábrica:

No coinciden los tipos: no se puede convertir deStringHandler aHandler<T>

¿Cómo arreglar esto?

Respuestas a la pregunta(7)

Su respuesta a la pregunta