In una libreria che sto sviluppando ho un metodo factory che assomiglia un po 'a:
public <T> T instantiate(Type targetType) {
return ...;
}
Sto usando un metodo di tipo parametrizzato per evitare che gli utenti della mia libreria debbano eseguire il cast ogni volta che lo invocano (sarebbe il caso se avessi scelto di restituire Object
).
C'è qualche ragione per cui non è una buona scelta di design?.
Non mi piace che il programmatore possa invocare il mio metodo come:
String s = instantiate(Integer.class);
Che è chiaramente sbagliato.
Sfortunatamente, il metodo richiede un tipo e non una classe, altrimenti avrei potuto scrivere qualcosa del tipo:
public <T> T instantiate(Class<T> targetClass) {
return ...;
}