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

时间:2018-10-30 16:25:02

标签: dart dart-sdk

在Dart 2中扩展{em> 或实现 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专门设置此字段。

但这是不可能的。此错误显示在analyzerbuild_runner上:

  

'A.bbases ='('((列表)→无效'))不是有效的替代   'Abase.bbases ='('((列表)→无效')。)

  1. 是否有理由不接受这种字段的专业化?
  2. 还有另一种方法来专门化extends上的字段吗? implements

1 个答案:

答案 0 :(得分:1)

您必须使用泛型:

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;
}