¿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?