gpt4 book ai didi

dart - 我可以在 Dart 中动态调用静态方法吗?

转载 作者:行者123 更新时间:2023-12-03 03:58:38 25 4
gpt4 key购买 nike

我可以动态调用实例的方法,但我无法调用静态方法(以在不需要实例时节省资源)。

主要思想是为不同级别的类(class)编码3-4个类(class),然后使用选定的一个(根据用户的选择)。

class AvailablePlans {
final _plans = [Beginner()];
static const _staticPlans = [Beginner];

getPlan() {
return _plans[0];
}

static getStaticPlan() {
return _staticPlans[0];
}
}

class Beginner {
void sayHello() {
print('Hello world!');
}

void sayHelloStatic() {
print('Hello world!');
}
}

void main() {
var x = AvailablePlans().getPlan();
x.sayHello(); // print Hello world!

var y = AvailablePlans.getStaticPlan();
y.sayHelloStatic(); // Uncaught exception: C.Type_Beginner00_coO.sayHelloStatic$0 is not a function

}

非常感谢你!

最佳答案

你总是可以引入一个接口(interface):

abstract class Course {
String get level;
void sayHello();
}

实现该接口(interface):

class Beginner implements Course {
@override
String get level => 'beginner';

@override
void sayHello() {
print('Hello from $level');
}
}

您可以像这样存储实例: final courses = <Course>[Beginner(), Intermediate()];
但是,这种方法存在一些问题。

(to save resources when an instance is not necessary)



别担心。似乎是过早的优化。如果您在类的实例化方面遇到性能问题,您可以随时尝试稍后对其进行优化。

您将无法按级别查找所需的类实例。所以我会按级别创建一个查找 map :

final courseByLevel = <String, Course>{
'beginner': Beginner(),
'intermediate': Intermediate()
};

这样你就可以获得相同的类实例,并且可以通过 courseByLevel['beginner'] 轻松获取它。表达。

关于dart - 我可以在 Dart 中动态调用静态方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58985341/

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