ho cercato mezonis approccio con l'attivatore e funziona. Ma è un approccio costoso in quanto utilizza i mirror, che richiede l'utilizzo di "mirrorsUsed" se non si desidera avere un file js 2-4 MB.
Questa mattina ho avuto l'idea di utilizzare un typedef generico come generatore e quindi sbarazzarsi di riflessione:
si definisce un tipo metodo come questo: (Aggiungi params se necessario)
typedef S ItemCreator<S>();
Poi nella classe che ha bisogno di creare le nuove istanze:
class PagedListData<T>{
...
ItemCreator<T> creator;
PagedListData(ItemCreator<T> this.creator) {
}
void performMagic() {
T item = creator();
...
}
}
Quindi è possibile instanciate il PagedList in questo modo:
PagedListData<UserListItem> users
= new PagedListData<UserListItem>(()=> new UserListItem());
Non perde il vantaggio di utilizzare generica in quanto al momento della dichiarazione è necessario fornire la classe di destinazione in ogni caso, in modo da definire il metodo creatore non fa male.
fonte
2015-02-17 06:39:41
I parametri di tipo in Dart implementano l'interfaccia 'Type'. L'interfaccia 'Tipo' non dichiara alcun membro. Ciò significa che l'interfaccia 'Type' viene utilizzata solo come chiave di identità dei tipi di runtime. Le procedure di riflessione integrate in Dart SDK ma non fanno parte del core Dart. Ciò significa che se vuoi introspettare il tuo programma dovresti usare la reflection library. Il bridge tra il tuo programma (in fase di esecuzione) e la reflection library è l'interfaccia 'Type'. Richiedete (riflettete) le informazioni richieste sulle classi usando questa interfaccia. – mezoni
Vedi anche https://github.com/dart-lang/sdk/issues/12921 –