gpt4 book ai didi

flutter - Dart:检查对象是否实现接口(interface)

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

我有以下类和接口(interface):

class Place extends Entity
with ChangeNotifier, FieldGetters
implements Scannable, Likable {
// ...some stuff
}


abstract class Likable {
// ... some stuff
}

Entity只是其他类的基类。

所以,问题是我想检查实现 Likable 的对象是否接口(interface)属于 Place 类或不。为此,我使用以下代码:

logger.i('likable is ${like.likable.runtimeType}');
logger.i('likable is Place: ${like.likable is Place}');

第一行按预期工作并显示以下输出:
I/flutter ( 1635): [38;5;12m┌───────────────────────────────────────────────────────────────────────────────[0m
I/flutter ( 1635): [38;5;12m├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄[0m
I/flutter ( 1635): [38;5;12m│ 💡 likable is Place[0m
I/flutter ( 1635): [38;5;12m└───────────────────────────────────────────────────────────────────────────────[0m

但是,第二行代码的行为很奇怪,并显示以下内容:
I/flutter ( 1635): [38;5;12m┌───────────────────────────────────────────────────────────────────────────────[0m
I/flutter ( 1635): [38;5;12m├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄[0m
I/flutter ( 1635): [38;5;12m│ 💡 likable is Place: false[0m
I/flutter ( 1635): [38;5;12m└───────────────────────────────────────────────────────────────────────────────[0m

官方文档建议可以通过 is查看接口(interface)继承关键词。我很困惑。在这种情况下如何检查接口(interface)继承?

Dart : v2.8.1
flutter : v1.17.0

最佳答案

在 Dart 中,一个类只能从一个父类(super class)继承(对于 Place 它是 Entity )和 implement从多个(即从这些类中获取函数)。

据我从您的描述中了解到,您正在做这样的事情(您可以运行它 here )。

class Person extends LivingCreature implements Mammal{
final _name;
void _toDrinkMilk(){
print("I drink milk as a person!");
}
Person(this._name);
}

class Mammal {
void _toDrinkMilk(){
print("I drink milk!");
}
}

class LivingCreature {

void _toLive(){
print("I live!");
}
}

void main() {
final bob = Person('Bob');
final mammal = Mammal();
print(mammal is LivingCreature);
print(bob.runtimeType);
bob._toDrinkMilk();
bob._toLive();
print('Bob is mammal: ${bob is Mammal}');
print('Mammal is Person: ${mammal is Person}');
}

此代码产生以下输出:
true
Person
I drink milk as a person!
I live!
Bob is mammal: true
Mammal is Person: false

所以,现在让我们谈谈你的情况,你的 like.likable应该是 Likable抽象类(我假设)。 Place同时实现 Likable ,所以它应该实现 Likable的所有方法.

现在,你想问 Dart 是你的 Likable 的类型。 (不扩展或实现任何东西)是 Place ,即 false如日志中所示。

如果是 class Likable extends Place {...那么在日志中你会有 like.likable is Place等于 true
更多关于扩展、实现,可以引用 Dart docs

附言我没有让 Mammal 抽象在 print() 中快速实例化它

希望能帮助到你!

关于flutter - Dart:检查对象是否实现接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62158494/

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