我可以在Java中聚合、代理或模拟@SuppressWarnings吗?

我可以在Java中聚合、代理或模拟@SuppressWarnings吗?,java,spring,annotations,Java,Spring,Annotations,我使用Spring构建了一个ModelMap,它被渲染,然后由Mustach解析。出于这个原因,我有一些类,它们的存在只是为了方便使用而包装数据 这些类具有代码中从未使用过的字段和方法,但实际上Spring(以及Mustach)使用了这些字段和方法。我想通过使用自定义注释@ForMustache对类进行注释来明确说明这是有意的,如下所示: @Target(ElementType.TYPE) @Retention(RetentionPolicy.SOURCE) public @interface

我使用Spring构建了一个ModelMap,它被渲染,然后由Mustach解析。出于这个原因,我有一些类,它们的存在只是为了方便使用而包装数据

这些类具有代码中从未使用过的字段和方法,但实际上Spring(以及Mustach)使用了这些字段和方法。我想通过使用自定义注释
@ForMustache
对类进行注释来明确说明这是有意的,如下所示:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.SOURCE)
public @interface ForMustache {
}
我的目标基本上是用一种花哨的方式来表示胡须的
@SuppressWarnings(“unused”)//用法

我试图用
@SuppressWarnings(“unused”)
注释
ForMustache
,但其效果在我的注释中应用,而不是传播到用
@ForMustache
注释的类型


我可以用另一个注释代理或模仿
@SuppressWarnings(“unused”)
吗?

@SuppressWarnings
注释适用于直接在源文件上工作的编译器和其他编译时工具

它也被指定为

@Retention(RetentionPolicy.SOURCE)
public @interface SuppressWarnings { ...
这意味着它在运行时不再可用。这意味着即使springs元注释感知处理也无法再看到它

如果有足够的时间,您可以构建一个注释处理器,该处理器在编译时将自定义的
@ForMustache
注释转换为
@SuppressWarnings
,以便编译器可以提取它。以同样的方式,你也可以

a)编译的代码不会抱怨没有分配给最终字段;b)不会生成警告,因为它会为字段生成公共getter。这些只能假设为已使用/可在编译器无法到达的地方使用

除了将
@SuppressWarnings
放在任何地方之外,您唯一的机会就是删除导致警告的条件

  • 使用编译器选项禁用检查
  • 添加公共getter或其他代码,以便使用字段(例如lombok)
  • 钩住编译过程

不,这些注释是为编译器准备的,它只会逐字地将它们应用到它们所在的元素上。但也许有一种方法不触发这种警告。与您正在尝试做的事情密切相关(您只是尝试创建一个只包含一个注释而不是多个注释的元注释)。这甚至可能是那个问题的重复。@zapl谢谢你的提示,我会努力调查的@JonK不,我不认为是这样,因为警告的性质。此外,注释是由Spring处理的,所以我可以使用“元注释”。回答得很好!我确实考虑了编写注释处理器的选择,但对于这一目标来说似乎太费力了。非常感谢你的建议!
@Data
class Foo {
    private final String value;
}