@Dart代码的重写
我注意到了,但我不知道怎么检查 我尝试使用IDEA dart插件来覆盖@Dart代码的重写,dart,overriding,dart-mirrors,petitparser,Dart,Overriding,Dart Mirrors,Petitparser,我注意到了,但我不知道怎么检查 我尝试使用IDEA dart插件来覆盖@override,但它没有任何效果。我们如何将@override与Dart一起使用?来自文档: 用于将实例成员(方法、字段、getter或setter)标记为重写继承的类成员的注释。如果没有替代成员,工具可以使用此注释提供警告 所以,这取决于你使用的工具 在当前的Dart编辑器(r24275)中,以下代码没有警告,但应该有警告(看起来像一个bug) import'package:meta/meta.dart'; 甲级{ m1
@override
,但它没有任何效果。我们如何将@override
与Dart一起使用?来自文档:
用于将实例成员(方法、字段、getter或setter)标记为重写继承的类成员的注释。如果没有替代成员,工具可以使用此注释提供警告
所以,这取决于你使用的工具
在当前的Dart编辑器(r24275)中,以下代码没有警告,但应该有警告(看起来像一个bug)
import'package:meta/meta.dart';
甲级{
m1(){}
}
B类扩展了A类{
@重写m1(){}//没有警告,因为A有一个m1()
@重写m2(){}//工具应显示警告,因为a没有m2()
}
注释是元数据的一个示例。您可以使用镜像在代码中检查这些。下面是一个简单的示例,用于检查子类中的m1()
方法是否具有@override
注释:
import'package:meta/meta.dart';
导入“dart:镜像”;
甲级{
m1(){}
}
B类扩展了A类{
@重写m1(){}
}
void main(){
ClassMirror ClassMirror=反射等级(B);
MethodMirror MethodMirror=classMirror.methods[const Symbol('m1');
InstanceMirror InstanceMirror=methodMirror.metadata.first;
打印(instanceMirror.reflectee);//的实例'_Override@0x2fa0dc31'
}
现在是2021年。覆盖是可选的
明智地使用@override注释,并且仅适用于超类不受程序员控制、超类位于不同的库或包中且被认为不稳定的方法。在任何情况下,使用@override都是可选的。来自dart api
范例
Class A {
void say (){
print ('Say something 1') ;
}
}
Class B extends A {
@override
void adds() { // when i don't type the same name of super class function show an
// warning not an error say 'The method doesn't override an inherited
// method.' because it's not same name but when type the same name must be
// overriding
print ('Say something 2 ')
}
更新:@override的主要用途是在继承到抽象超类的子类中尝试访问抽象类中的抽象方法时。必须使用@override来访问抽象方法。无论如何,现在使用@override可能是一个好主意,因为这样做没有问题,当工具修复后,它会工作。此外,它对其他程序员阅读代码也很有用。现在是2019年,如果在没有
@override
关键字的情况下重写该方法,官方dart游乐场不会显示任何警告。但在上述示例中,它确实为m2
方法提供了警告。