我不明白为什么下面的例子不起作用:
void main() {
final BaseClass something = ConcreteClass('test');
if (something is I) {
print(something.exists); // The getter 'exists' isn't defined for the type 'BaseClass'.
}
}
abstract interface class I {
String get exists;
}
abstract class BaseClass {}
class ConcreteClass extends BaseClass implements I {
ConcreteClass(this.exists);
@override
final String exists;
}
我是否达到了这里提到的类型提升中的"getter"限制:https://dart.dev/tools/non-promotion-reasons#not-field?
如果是这样的话,我如何在不诉诸施法的情况下解决这个问题(我尽量避免)?
把exists
加到BaseClass
不是我真正的代码中的选项.
此外,Dart 3.3的发行说明说:
抽象getters现在可以根据私有final规则提升 如果没有冲突的声明,现场推广.
...听起来像是我想要的