Oltre alla questione della cancellazione del tipo - che rende questo impossibile in ogni caso - semplicemente non si può garantire che T
ha un esposto, costruttore no-argument!
La soluzione tradizionale consiste nel passare gli oggetti factory che forniscono metodi che possono essere utilizzati per ottenere gli oggetti T
. Un esempio semplice sarebbe
interface Factory<T> {
T create();
}
e poi la classe può ottenere un Factory<T>
e chiamare create()
su di esso per ottenere più T
s. Esempi più sofisticati potrebbero richiedere argomenti aggiuntivi per un metodo create
, ad esempio, o sovraccarichi.
Meno soluzioni alternative includono la riflessione esplicita, passando intorno agli oggetti Class<T>
. Ad esempio, ArrayList.class.newInstance()
restituisce un raw appena costruito ArrayList
. È necessario passare esplicitamente attorno all'oggetto Class
e l'approccio basato sulla riflessione è più lento di un normale costruttore o di un oggetto factory (anche se la velocità di riflessione è migliorata di recente). Dipende anche dalla classe che espone un costruttore no-arg, il che non è sempre il caso. Può essere fatto funzionare, ma non è mai quello che chiamerei "piacevole".
(che ha detto, per riferimento, vi sono indicazioni che la situazione potrebbe cambiare un po 'in Java 8 con Project Lambda e gli amici.)
fonte
2012-05-31 09:30:22
possibile duplicato del [Crea istanza di tipo generico in Java?] (http://stackoverflow.com/questions/75175/create-instance-of-generic-type-in-java) – pingw33n
hai ragione. completamente trascurato che – nux