是否可以在 Dart 中的 class 中将方法声明为最终方法?
Is it possible to declare a method as final in a class in Dart?
在 Java 中,可以在 class 中声明一个方法,以防止子 class 重写它。
例如:
class Foo {
final void bar() {
// some code here.
}
}
Dart中有类似的构造吗?
package:meta
提供 @nonVirtual
annotation to disallow overriding methods and a @sealed
annotation 以完全禁止派生 类。
请注意,这些注释仅提供 提示 至 dartanalyzer
。他们实际上不会阻止任何违反注释的事情,而是会导致在执行分析时打印警告。
是的,Irn & Jamesdlin 答案的代码:
import 'package:meta/meta.dart';
class Foo {
@nonVirtual
void bar() {
print("bar from Foo!");
}
}
class SubFoo extends Foo {
@override
void bar() {
print("bar from SubFoo");
}
}
然后您从分析器中收到这样的警告:
成员 'bar' 在 'Foo' 中被声明为非虚拟的并且不能在 subclasses.dart(invalid_override_of_non_virtual_member)
中被覆盖
在 Java 中,可以在 class 中声明一个方法,以防止子 class 重写它。
例如:
class Foo {
final void bar() {
// some code here.
}
}
Dart中有类似的构造吗?
package:meta
提供 @nonVirtual
annotation to disallow overriding methods and a @sealed
annotation 以完全禁止派生 类。
请注意,这些注释仅提供 提示 至 dartanalyzer
。他们实际上不会阻止任何违反注释的事情,而是会导致在执行分析时打印警告。
是的,Irn & Jamesdlin 答案的代码:
import 'package:meta/meta.dart';
class Foo {
@nonVirtual
void bar() {
print("bar from Foo!");
}
}
class SubFoo extends Foo {
@override
void bar() {
print("bar from SubFoo");
}
}
然后您从分析器中收到这样的警告:
成员 'bar' 在 'Foo' 中被声明为非虚拟的并且不能在 subclasses.dart(invalid_override_of_non_virtual_member)
中被覆盖