这可能不是Dart
具体问题。
我有:
class A {
int a;
A(this.a);
}
class B extends A {
String b;
B(a, this.b) : super(a);
}
所以你看,类A
有一个属性int a
而B
只是扩展A
并且有一个额外的属性String b
和一个包装类{{ 1}}:
C
Dart编辑抱怨class C {
A c;
C(this.c);
void doSomething() {
if (c is B) {
print(c.b);
} else {
print(c.a);
}
}
}
。你怎么处理这个?我想摆脱警告,但我不想将属性c doesn't have a getter b
添加到课程b
答案 0 :(得分:2)
分析仪不应在此处添加警告。我认为这与此问题有关:Analyzer fails to respect certain "is" checks。
同时,您可以在(c as B).b
中使用c
施放 B
。
答案 1 :(得分:2)
(c as B)
有效,但会进行动态类型检查(可能会被VM删除)。
如果您只想删除警告,而不更改程序的语义,则可以将其分配给正确类型的临时变量:
void doSomething() {
if (c is B) {
B b = c;
print(b.b);
} else {
print(c.a);
}
}
答案 2 :(得分:1)
你可以施放表达。
print((c as B).b);