如何在Dart中检测分配给基类变量的对象中的接口?

时间:2019-01-14 05:38:26

标签: inheritance interface dart

考虑这样的类层次结构:

  • 只有一个基类BaseClass
  • BaseClass有许多派生类,其中有些实现了不同的接口

例如,有一个类DerivedClass扩展了BaseClass并实现了SomeInterface

由于我要处理都继承自BaseClass的许多不同类,因此我想将它们的对象存储在List<BaseClass>之类的容器中。但是然后我似乎无法找出一种方法来检测这些对象中的接口。

class SomeInterface {
  String field;
}

abstract class BaseClass {
  int count;

  BaseClass(this.count);
}

class DerivedClass extends BaseClass implements SomeInterface {
  String field;

  DerivedClass(int count, this.field) : super(count);
}

void printField(SomeInterface obj) {
  print(obj.field);
}

void main() {
  BaseClass item = DerivedClass(4, 'test');
  if (item is SomeInterface) {  // Attempt one
    print(item.field);
  }
  printField(item);  // Attempt two
}

我以前在继承链中像实际的超类一样拥有SomeInterface,但是我想避免这样做,因为在我的情况下接口更易于处理。你会推荐什么?

1 个答案:

答案 0 :(得分:1)

is适用于已实现的接口,与超类相同。

所以

if (item is SomeInterface) {

是必经之路。

正如@attdona在下面指出的那样,在SomeInterface检查演员表之后访问is成员仍然是必要的。

另请参见