3

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

见代码:

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.

但这是不可能的。此错误出现在analyzeror上build_runner

'A.bbases=' ('(List) → void') 不是 'Abase.bbases=' ('(List) → void') 的有效覆盖。

  1. 有理由不接受这种专业化的领域吗?
  2. 是否有另一种方法可以在extendsor 上专门化领域implements
4

1 回答 1

4

你必须使用泛型:

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;
}
于 2018-10-30T16:35:01.913 回答