2013-07-09 4 views

ответ

3

Аннотации @override является примером метаданных. Вы можете использовать Зеркала, чтобы проверить их в коде. Вот простой пример, который проверяет, является ли метод 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:

аннотацию используется для обозначения члена экземпляра (метод, поле, геттер или сеттера) в качестве переопределения унаследованного члена класса. Инструменты могут использовать эту аннотацию, чтобы предоставить предупреждение, если нет переопределенного элемента.

Таким образом, это зависит от используемого вами инструмента.

В текущем Dart Editor (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() 
} 
+1

Это, вероятно, хорошая идея использовать @Override сейчас в любом случае, так как нет никаких проблем с этим способом, и когда инструменты они будут работать. Кроме того, это полезно для других программистов, читающих код. –