Как реализовать фабричный шаблон с обобщениями в Java?

У меня общий интерфейсукротитель

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

У меня может быть n реализаций этого интерфейса. Допустим, у меня есть следующие 2 реализации на данный момент. Один, который обрабатывает объекты String, а другой - Date

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

Я хочу написать фабрику, которая будет возвращать экземпляры обработчиков на основе типа класса. Что-то вроде этого :

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

Я получаю следующую ошибку на этом заводе:

Несоответствие типов: невозможно преобразовать изStringHandler вHandler<T>

Как это исправить?

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

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