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?