gpt4 book ai didi

inheritance - 如何检测分配给 Dart 中基类变量的对象中的接口(interface)?

转载 作者:行者123 更新时间:2023-12-03 02:56:39 24 4
gpt4 key购买 nike

考虑这样的类层次结构:

  • 有一个基类 BaseClass
  • BaseClass 有很多派生类,其中一些实现了不同的接口(interface)

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

    因为我正在处理许多不同的类,它们都继承自 BaseClass。 ,我想我会将他们的对象存储在像 List<BaseClass> 这样的容器中.但是我似乎无法找到一种方法来检测这些对象中的接口(interface)。
    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在继承链中就像一个实际的父类(super class),但我想远离它,因为在我的情况下接口(interface)更容易处理。你会推荐什么?

    最佳答案

    is适用于实现的接口(interface)与父类(super class)相同。

    所以

    if (item is SomeInterface) {

    是要走的路。

    正如@attdona 在下面指出的,访问 SomeInterface is 之后的成员检查类型转换仍然是必要的。

    也可以看看
  • https://github.com/dart-lang/sdk/issues/35525
  • https://github.com/dart-lang/sdk/issues/35314
  • 关于inheritance - 如何检测分配给 Dart 中基类变量的对象中的接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54176236/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com