考虑这样的类层次结构:
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
,但是我想避免这样做,因为在我的情况下接口更易于处理。你会推荐什么?
答案 0 :(得分:1)
is
适用于已实现的接口,与超类相同。
所以
if (item is SomeInterface) {
是必经之路。
正如@attdona在下面指出的那样,在SomeInterface
检查演员表之后访问is
成员仍然是必要的。
另请参见