【发布时间】:2018-10-30 16:25:01
【问题描述】:
当 class 在 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 专门化该字段。
但这是不可能的。在analyzer 或build_runner 上出现此错误:
'A.bbases=' ('(List) → void') 不是有效的覆盖 'Abase.bbases=' ('(List) → void')。
- 是否有理由不接受这种专业化的领域?
- 是否有另一种方法可以专门化
extends上的字段或implements?
【问题讨论】:
-
您可以使用泛型,但我发现您的代码太混乱,无法进行实际实现。类似
abstract class Abase<T> { String id; List<T> bbases; }和class A implements Abase<Bbase> { -
泛型是方法。太好了!