如何在 Dart 中专门化(覆盖)class 字段?

How specialize (override) class fields in Dart?

扩展 实施 时,我想 专门化字段 (覆盖) 在 Dart 2 中。

见代码:

abstract class Abase {
  String id;
  List<Bbase> bbases;
}

abstract class Bbase {
  String id;
}

class A implements Abase {
  String id;
  String name;

  List<B> bbases; // 'A.bbases=' ('(List<B>) → void') isn't a valid override of 'Abase.bbases=' ('(List<Bbase>) → void').
}

class B implements Bbase {
  String id;
}

class Abase 有通用字段 List<Bbase> bbase 并且在 class A 中我想用 List<B> bbase.

专门化这个字段

但这是不可能的。此错误出现在 analyzerbuild_runner:

'A.bbases=' ('(List) → void') isn't a valid override of 'Abase.bbases=' ('(List) → void').

  1. 是否有不接受该字段专业化的原因?
  2. 是否有另一种方法可以专门化 extends 上的字段或 implements?

你必须使用泛型:

abstract class Abase<T extends Bbase> {
  String id;
  List<T> bbases;
}

abstract class Bbase {
  String id;
}

class A implements Abase<B> {
  String id;
  String name;

  List<B> bbases;
}

class B implements Bbase {
  String id;
}