我使用 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")
吗? 最佳答案
@SuppressWarnings
注释适用于直接在源文件上工作的编译器和其他编译时工具。
它也被指定为
@Retention(RetentionPolicy.SOURCE)
public @interface SuppressWarnings { ...
这意味着它在运行时不应该再可用。这意味着即使是 spring 元注释感知处理也无法再看到它。
如果有足够的时间,您可以构建一个注释处理器,在编译时将自定义
@ForMustache
注释转换为 @SuppressWarnings
,以便编译器可以接收它。以类似的方式 Lombok 可以转动@Data
class Foo {
private final String value;
}
a) 编译并且不会提示没有分配给 final 字段的代码和 b) 它不会生成警告,因为它会为该字段生成一个公共(public) getter。这些只能被假定使用/它们可以从编译器无法到达的地方使用。
除了将
@SuppressWarnings
放在任何地方之外,您唯一的机会就是删除导致警告的条件。