5

PetitParserDart@overrideのコードにたくさんあることに気付きましたが、それらをどのようにチェックするのかわかりませんか?

IDEA dart-plugin for を試してみまし@overrideたが、まったく効果がありません。@overrideDart でどのように使用できますか?

4

3 に答える 3

6

@overrideドキュメントから:

継承されたクラス メンバーをオーバーライドするものとしてインスタンス メンバー (メソッド、フィールド、ゲッター、またはセッター) をマークするために使用される注釈。オーバーライドされたメンバーがない場合、ツールはこの注釈を使用して警告を提供できます。

したがって、使用するツールによって異なります。

現在の Dart エディター (r24275) では、次のコードに対する警告は表示されませんが、表示されるはずです (バグのようです)。

import 'package:meta/meta.dart';
class A {
  m1() {}
}
class B extends A {
  @override m1() {} // no warning because A has a m1()
  @override m2() {} // tools should display a warning because A has no m2()
}
于 2013-07-09T14:40:09.323 に答える
6

@override注釈はメタデータの一例です。ミラーを使用して、コードでこれらをチェックできます。m1()子クラスのメソッドに@overrideアノテーションがあるかどうかを確認する簡単な例を次に示します。

import 'package:meta/meta.dart';
import 'dart:mirrors';

class A {
  m1() {}
}

class B extends A {
  @override m1() {}
}

void main() {
  ClassMirror classMirror = reflectClass(B);
  MethodMirror methodMirror = classMirror.methods[const Symbol('m1')];
  InstanceMirror instanceMirror = methodMirror.metadata.first;
  print(instanceMirror.reflectee);  // Instance of '_Override@0x2fa0dc31'
}
于 2013-07-09T15:05:01.640 に答える