在Dart 2.6.0中,当我使用is
测试类成员变量的类型时,条件代码块不会推断类型。
在以下代码中,方法show1()
产生错误,“未为类'C1'定义吸气剂's2'。”同时,方法show2()
可以很好地编译。
class C1 {
C1(this.s1);
String s1;
}
class C2 extends C1 {
C2(String s1,this.s2) : super(s1);
String s2;
}
class InferenceTest {
InferenceTest(this.c);
C1 c;
void show1() {
print(c.s1);
if (c is C2) print(c.s2); // error
}
void show2(C1 c) {
print(c.s1);
if (c is C2) print(c.s2); // no error
}
}
这似乎是一个错误,但似乎我也不应该第一个注意到这一点。我在尝试从小部件状态对widget.myValue
使用推论时遇到了问题。
我找到了错误,还是我不了解某些内容?
(我发现在Java之类的多线程环境中这是合理的,因为c
的值可能会在is
测试和使用c
之间改变。但是我理解Dart在很大程度上假设一个线程。)