2013-07-09 125 views

回答

3

@override注释是元数据的一个例子。您可以使用Mirrors在代码中检查这些内容。下面是一个检查,如果在子类中m1()方法有@verride诠释一个简单的例子:

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 '[email protected]' 
} 
2

@override DOC:

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

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

在当前的Dart Editor(r24275)中,以下代码没有警告,但它应该(看起来像一个bug)。

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() 
} 
+1

它可能使用@override一个好主意,反正现在,因为不存在与这样当工具没有问题是固定的,它会工作。另外,它对于其他程序员阅读代码很有用。 –