可以在 Dart 中覆盖注释吗?

Can an annotation be overriden in Dart?

更新:作为 "get rid" 注释的澄清,我的意思是在不更改分析器本身的任何内容的情况下抑制分析器抛出的警告

我正在用注释扩展 class,我想覆盖父 class 注释,更具体地说,将其删除。可以这样做吗?

例如:

@immutable
class A {}

/// get rid of @immutable annotation
class MutableA extends A {}

注释在 Dart 语言本身中没有语义,它们意味着识别它们的工具决定它们的意思。

注释永远不会继承。如果您使用 dart:mirrors 检查,则注释仅存在于源代码中编写的位置。注释位于 声明 上,而不是值。

因此,如果一个工具识别 @immutable,并且它决定“不可变”的 属性 被子classes“继承”,那么这就是该工具的决定. immutable annotation 被记录为适用于“所有子类型”。

从语言的角度来看,MutableA上没有@immutable,都在工具的头部,所以没有注解去掉。 A 上注解的意思A 的所有子class 必须是不可变的。

您从分析器获得的消息是提示。您可以通过多种方式 suppress hints ,例如在导致提示的行之前添加“忽略”注释。 在这种情况下,您可以添加

// ignore: must_be_immutable

在 subclass 的 class 声明之前的行上,它不是不可变的。那应该抑制提示。