飞镖编码风格

时间:2013-06-24 12:30:04

标签: oop coding-style dart

这可能不是Dart具体问题。

我有:

class A {
  int a;

  A(this.a);
}

class B extends A {
  String b;

  B(a, this.b) : super(a);
}

所以你看,类A有一个属性int aB只是扩展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

3 个答案:

答案 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);