当前位置: 首页 > 知识库问答 >
问题:

哪些标注目标适用于Java记录?

东方镜
2023-03-14

我有一个注释用于像这样定义的方法或字段:

@Retention(RetentionPolicy.RUNTIME)
@Target(value = {ElementType.METHOD, ElementType.FIELD})
public @interface NotColumn {
}

我想阻止用户在记录上使用它,因为在该上下文中使用此注释是没有意义的。这样做似乎不应该编译,因为我没有将ElementType.PARAMETER指定为有效的@Target

不过,以下编译正常:

public record MyRecord(String customerId,
                       String companyName,
                       @NotColumn String description
}

但是这个带有紧凑构造函数的表单无法使用“java:注解类型不适用于这种声明”进行编译——这实际上是我所期望的。

public record MyRecord(String customerId,
                       String companyName,
                       @NotColumn String description
   public MyRecord {
   }
}

共有1个答案

钱毅
2023-03-14
public record MyRecord(String customerId,
                       String companyName,
                       @NotColumn String description

描述可能看起来有点像一个参数,但出于注释定位的目的,它不仅仅是这样。它也可以像一个领域一样行动。

来自JLS(此版本突出显示了记录发生变化的部分):

记录类的记录组件上的注释可以传播到 8.10.3 中指定的记录类的成员和构造函数。

第8.10.3节的要点是,像your @NotColumn这样的注释,只有在它们适用于那些目标时,才会传播到生成的方法、字段和参数上。否则它们会被忽略。您的注释适用于字段,因此它将传播到生成的记录的< code>description字段。

添加构造函数时出现错误的事实是一个错误,并且已经得到修复。无论您是否指定构造函数,注释的有效性都应该是相同的。在Java的未来版本中,您的两个示例都可以正常编译

我想阻止用户在记录上使用此[注释]

对不起,这是不可能的。

 类似资料:
  • 插值问题当我通过角度插值指定一些html标记(如按钮)或自定义标记时,它不会显示 在组件中。html文件

  • MySQL 是目前世界上最流行的开源关系数据库,大多应用于互联网行业。比如,在国内,大家所熟知的百度、腾讯、淘宝、京东、网易、新浪等,国外的 Google、Facebook、Twitter、GitHub 等都在使用 MySQL。社交、电商、游戏的核心存储往往也是 MySQL。 任何产品都不可能是万能的,也不可能适用于所有的应用场景。那么 MySQL 到底适用于哪些场景又不适用于哪些场景呢? 1.

  • 问题内容: 许多Swing组件都支持嵌入式HTML,但是我找不到有关该主题的任何官方文档。(Sun页面上有关HTML的所有内容似乎都针对JEditorPane) 因此:Swing组件支持哪些HTML标签? 编辑: 尽管我说我缺少“官方文档”,但我也想要任何“非官方”文档。 问题答案: 正如Software Monkey所说,Swing支持HTML 3.2(Wilbur)。您可以在以下位置找到此过时

  • 当屏幕宽度大于700px时,iframe标签的宽度为400px,高度为225px。如果屏幕宽度小于700px,那么iframe标签的宽度将是屏幕的50%,高度将是屏幕的28.13%。 我试过用这个代码。但不管用。 问题出在哪里?

  • 问题内容: 哪个Java SE版本适用于android studio 3.1? 我最近在Windows 10上安装了Java SE 10,但android studio始终显示Gradle同步失败消息,并显示以下错误: 问题答案: Android Studio 3.1的最大可能版本是Java8。此外,较低的API版本无法使用Java 8的某些功能。例如,我的最低API版本是16,如果尝试使用,则会

  • 问题内容: 在阅读有关标记接口的信息时,我偶然发现了以下站点:项目37:使用标记接口定义类型 在这里,根据Joshua Bloch的说法,标记接口比标记注释有两个优点。 1. 标记接口定义了一种由标记的类的实例实现的类型。标记注释没有。这种类型的存在使您可以在编译时捕获错误,而如果使用标记注释,则这些错误在运行时才捕获。 2. 标记接口相对于标记注释的另一个优点是可以更精确地定位它们。如果使用ta