Próbowałem mezonis podejście z aktywatorem i to działa. Jest to jednak kosztowne podejście, ponieważ korzysta z serwerów lustrzanych, co wymaga użycia "mirrorsUsed", jeśli nie chcesz mieć pliku JS o wielkości 2-4 MB.
Dziś rano miałem pomysł, aby użyć rodzajowego typedef jako generatora i tym samym pozbyć się refleksji:
zdefiniować rodzaj metody takie jak to: (Dodaj params jeśli to konieczne)
typedef S ItemCreator<S>();
Następnie w klasie, które muszą tworzyć nowe instancje:
class PagedListData<T>{
...
ItemCreator<T> creator;
PagedListData(ItemCreator<T> this.creator) {
}
void performMagic() {
T item = creator();
...
}
}
Następnie można instanciate się PagedList tak:
PagedListData<UserListItem> users
= new PagedListData<UserListItem>(()=> new UserListItem());
Nie stracić Zaletą korzystania generic ponieważ w momencie zgłoszenia należy podać klasę docelową tak, więc określanie sposobu twórca nie boli.
Parametry typu w Dart implementuje interfejs "Typ". Interfejs 'Type' nie deklaruje żadnych członków. Oznacza to, że interfejs "Typ" używany jest tylko jako klucz tożsamości typów uruchomieniowych. Procedury odbicia wbudowane w Dart SDK, ale nie są częścią rdzenia Dart. Oznacza to, że jeśli chcesz zgłębić swój program, powinieneś użyć biblioteki refleksów. Pomost pomiędzy twoim programem (przy uruchomieniu) a biblioteką refleksów to interfejs 'Typ'. Żądasz (odzwierciedla) wymagane informacje o klasach za pomocą tego interfejsu. – mezoni
Zobacz także https://github.com/dart-lang/sdk/issues/12921 –