2

我想在 Java 中创建一个或注释@Stub,以表明某些类仅用于测试。此外,我喜欢将这些类设为已弃用,以阻止我图书馆的用户使用它们。我喜欢在 JSR305 中做一些类似于和其他注释的东西。@Example@Mock@Nullable

我想出了这个:

import javax.annotation.meta.TypeQualifierNickname;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.*;

@Deprecated
@Retention(RetentionPolicy.RUNTIME)
@TypeQualifierNickname
@Target(value=TYPE)
public @interface Stub {
}

和用例:

@Stub
public final class SuperAwesome implements Feature {
}

不幸的是,尽管使用了@TypeQualifierNickname,它看起来就像我的@Stub注释被 Intellij 和 javac 编译器标记为已弃用,而不是目标注释类。

有没有办法,这可以在不需要更改 javac 或 IDE 的情况下工作?

4

2 回答 2

1

您将需要编写一些逻辑来强制执行您的编程规则,即“不要使用@Stub注释调用方法”。您可以使用的两个框架是Checker Frameworkerror-prone

缺点是你的库的用户每次编译你的代码时都需要运行你的工具。您需要编写说明,告诉他们如何调整构建过程以运行检查您的编程规则的工具。

于 2016-04-05T11:33:36.323 回答
0

您将需要编写一个自定义注释处理器作为

@Deprecated

注释适用于 Stub 接口,而不适用于使用它的位置。我进行了快速搜索,但大多数示例只是在控制台上打印内容。这可能会有所帮助

https://deors.wordpress.com/2011/10/08/annotation-processors/

于 2016-04-04T15:30:15.533 回答