【问题标题】:How specialize (override) class fields in Dart?Dart 中如何专门化(覆盖)类字段?
【发布时间】: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&lt;Bbase&gt; bbase,而在 class A 中,我想使用 List&lt;B&gt; bbase 专门化该字段。

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

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

  1. 是否有理由不接受这种专业化的领域?
  2. 是否有另一种方法可以专门化 extends 上的字段或 implements?

【问题讨论】:

  • 您可以使用泛型,但我发现您的代码太混乱,无法进行实际实现。类似abstract class Abase&lt;T&gt; { String id; List&lt;T&gt; bbases; }class A implements Abase&lt;Bbase&gt; {
  • 泛型是方法。太好了!

标签: dart dart-sdk


【解决方案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;
}

【讨论】:

  • 太好了,这就是我要找的。​​span>
猜你喜欢
  • 1970-01-01
  • 2021-11-18
  • 2019-06-27
  • 2015-06-15
  • 2011-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多