Como implementar o padrão de fábrica com genéricos em Java?

Eu tenho uma interface genéricaHandler

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

Eu posso ter n implementações dessa interface. Digamos que eu tenho duas implementações a seguir por enquanto. Um que lida com objetos String e outro lida com Data

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);
  }
}

Eu quero escrever uma fábrica que retornará instâncias de manipulador com base no tipo de classe. Algo assim :

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

Recebo o seguinte erro nesta fábrica:

Incompatibilidade de tipo: não é possível converter deStringHandler paraHandler<T>

Como consertar isto?

questionAnswers(7)

yourAnswerToTheQuestion