是否可以在 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)

中被覆盖