【发布时间】:2016-10-17 19:12:18
【问题描述】:
我对 Dart 还很陌生,并且仍在学习它带来的所有细微差别。我目前的任务真正让我感到困扰的一件事是从父类继承(或代理)静态方法。
void main() {
EnglishCasual.greet();
}
class English {
static greet() {
actGreeting();
sayGreeting();
}
static sayGreeting() {
print('hello');
}
static actGreeting() {
print('<tips hat>');
}
}
class EnglishCasual extends English {
static sayGreeting() {
print("m'lady");
}
static actGreeting() {
print('<tips fedora>');
}
}
上面给出了错误NoSuchMethodError: method not found: 'greet',根据 Dart 文档,这是预期的行为,因为静态方法不是继承的(这对我来说似乎很奇怪,但没关系。继续……)
然后我尝试了一个简单的父类代理...
但这会产生另一个错误:Invalid context for 'super' invocation 或 'super' is only available in instance methods。好的...让我们通过名称显式调用父类。
但是,正如预期的那样,这只是对English.greet() 的任何其他呼叫处理,我们得到的是正式的问候而不是随意的问候。有道理。
于是我转向反思。我在 SO 上找到了一个看起来很有希望的 sn-p 并对其进行了测试:
这导致了错误The method 'greet' is not defined for the class 'EnglishCasual',这是我应该预料到的,因为noSuchMethod 没有被定义为静态,所以它没有被调用静态方法调用。所以,最后一次……
我们得到另一个错误The name 'noSuchMethod' is already defined in 'core/object.dart'。
在这一点上,我没有想法。似乎没有办法完成这个(看似简单的)练习,我真的希望你们能指出我正确的方向。
这样做的正确方法是什么?
【问题讨论】:
-
静态方法不会被继承,也不能被 AFAIK 代理。
-
不要使用静态方法
标签: inheritance dart static-methods