我使用Spring构建一个ModelMap,它由Mustache渲染然后解析。出于这个原因,我有一些类只存在为Mustache方便的数据包装。
这些类具有从未在代码中使用的字段和方法,但实际上是由Spring(以及Mustache)使用的。我想通过使用如下所示的自定义注释@ForMustache
对类进行注释来明确声明这是有意的:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.SOURCE)
public @interface ForMustache {
}
我的目标基本上是一种说@SuppressWarnings("unused") // For Mustache
的奇特方式。
我尝试使用ForMustache
注释@SuppressWarnings("unused")
,但其效果适用于我的注释,而不是传播到使用@ForMustache
注释的类型。
我可以使用其他注释代理或模仿@SuppressWarnings("unused")
吗?
答案 0 :(得分:2)
@SuppressWarnings
注释适用于直接在源文件上工作的编译器和其他编译时工具。
它也被指定为
@Retention(RetentionPolicy.SOURCE)
public @interface SuppressWarnings { ...
意味着它不应该在运行时可用。这意味着即使是弹簧元注释感知处理也无法再看到它。
如果有足够的时间,您可以构建一个注释处理器,在编译时将自定义@ForMustache
注释转换为@SuppressWarnings
,以便编译器可以获取它。以类似的方式Lombok可以转
@Data
class Foo {
private final String value;
}
进入a)代码编译并且不抱怨没有分配给最终字段,b)它不会生成警告,因为它会为字段生成公共getter。这些只能被假定使用/它们可以在编译器范围之外的地方使用。
除了将@SuppressWarnings
放在任何地方之外,您唯一的机会是删除导致警告的条件。