@override Dart 代码

Fre*_*ind 5 overriding dart petitparser dart-mirrors

我注意到PetitParserDart@override在代码中有很多,但我不知道如何检查它们?

我尝试了 IDEA dart-plugin for @override,但它根本没有效果。我们如何@override与 Dart 一起使用?

Ale*_*uin 5

@override文档:

用于将实例成员(方法、字段、getter 或 setter)标记为覆盖继承的类成员的注释。如果没有被覆盖的成员,工具可以使用此注释来提供警告。

因此,这取决于您使用的工具。

在当前的 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()
}
Run Code Online (Sandbox Code Playgroud)

  • 无论如何,现在使用@override 可能是一个好主意,因为这样做没有问题,并且当工具修复后它将起作用。此外,它对于阅读代码的其他程序员很有用。 (2认同)

Sha*_*uli 5

@override注释是元数据的一个例子。您可以使用 Mirrors 在代码中检查这些。下面是一个简单的例子,检查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'
}
Run Code Online (Sandbox Code Playgroud)