sto imparando di Java generici, ho intoppo in qualche problema istanziare il tipo di informazioni ricevuta da parametri generici (questo è possibile in C# però)istanziare generico
class Person {
public static <T> T say() {
return new T; // this has error
}
}
ho provato questo: generics in Java - instantiating T
public static <T> T say(Class<?> t) {
return t.newInstance();
}
Errore:
incompatible types
found : capture#426 of ?
required: T
che non funziona. Di seguito sembra ok, ma comporta istanziare una certa classe, non può essere utilizzato su metodo statico: Instantiating generics type in java
public class Abc<T>
{
public T getInstanceOfT(Class<T> aClass)
{
return aClass.newInstance();
}
}
E 'questo il tipo di cancellazione gente Java stanno dicendo? È questa la limitazione della cancellazione del tipo?
Qual è il modo per aggirare questo problema?
+1 e accettata, non è elegante come C# se (non il tuo colpa ;-)). A proposito, è questo che chiamano cancellazione di tipo, ecco perché non può istanziare una T direttamente? – Hao
@Hao: esattamente: il tipo effettivo di T non è disponibile in fase di esecuzione, ecco perché è necessario passare in un oggetto Class per renderlo esplicito. –