1

多分これは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とラッパー クラスがありますC

class C {
  A c;

  C(this.c);

  void doSomething() {
    if (c is B) {
      print(c.b);
    } else {
      print(c.a);      
    }
  }

}

Dart エディターは、c doesn't have a getter b. これにどのように対処しますか?b警告を取り除きたいが、クラスに属性を追加したくないA

4

3 に答える 3

2

(c as B)動作しますが、動的な型チェックを行います (おそらく VM によって排除されるでしょう)。

プログラムのセマンティクスを変更せずに警告を削除したいだけの場合は、正しいタイプの一時変数に割り当てることができます。

void doSomething() {
  if (c is B) {
    B b = c;
    print(b.b);
  } else {
    print(c.a);
  }
}
于 2013-06-24T13:59:18.073 に答える
2

アナライザーはここに警告を追加するべきではありません。これはこの問題に関連していると思います:アナライザーは特定の「is」チェックを尊重しません

その間、を使用(c as B).bしてキャスト できます。cB

于 2013-06-24T12:55:31.797 に答える
1

式をキャストできます。

print((c as B).b);
于 2013-06-24T12:38:48.500 に答える