2013-07-09 162 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一個好主意,反正現在,因爲不存在與這樣當工具沒有問題是固定的,它會工作。另外,它對於其他程序員閱讀代碼很有用。 –