Как реализовать фабричный шаблон с обобщениями в 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>
Как это исправить?