Dart — класс с общим, который расширяет второй класс вторым общим — Возможно ли это?

#generics #dart

#общие #dart

Вопрос:

Вот код, который я хотел бы сделать:

 abstract class StateBase<E> {
  void restoreState( E target );
  void saveState( E source );
}

class StateController<T extends StateBase<E>> {
  final List<T> _states = [];

  void takeSnapshot( E target ) { ... }
  void addState( T state ) { ... }
  

Но в строке:

 class StateController<T extends StateBase<E>> {
  

Когда я добавляю бит <E>, он выдает ошибку:

 The name 'E' isn't a type so it can't be used as a type argument.  
  

Динамическая типизация означает, что я могу обойтись без бита ‘E’ и просто использовать ‘StateBase’, но я бы предпочел проверку типа, которую я могу получить, используя второй общий E.

Возможно ли это сделать в Dart?

Спасибо за ваше время!

Ответ №1:

Просто добавьте E в качестве другого параметра типа:

 class StateController<E, T extends StateBase<E>>
  

Комментарии:

1. Это сработало отлично! И имеет полный смысл. Большое спасибо! 🙂