是否可以在 Dart 的类中将方法声明为 Final?

问题描述 投票:0回答:2

在 Java 中,可以在类中声明方法以防止子类覆盖它。

例如:

class Foo {

   final void bar() {
     // some code here.
   }

}

Dart 中有类似的构造吗?

class dart methods final
2个回答
15
投票

package:meta
提供了
@nonVirtual
注释
来禁止重写方法,并提供
@sealed
注释
来完全禁止派生类。

请注意,这些注释只是为 dartanalyzer 提供

提示
。它们实际上不会阻止任何违反注释的行为,相反,它们会在执行分析时打印警告。


2
投票

是的,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”中被声明为非虚拟,并且不能在子类中被覆盖。dart(invalid_override_of_non_virtual_member)

© www.soinside.com 2019 - 2024. All rights reserved.