地狱冻结了,我正在考虑向JSR-305 @Nonnull
and @Nullable
annotations API添加依赖jOOQ,例如作出如下保证:
@Retention(RUNTIME)
在所有不幸的选项中,我选择JSR-305,当然,因为它似乎是最不具侵入性的依赖,despite it being dormant。这些是我的侵入性问题:
JSR-305注释有NoClassDefFoundError
,原因很明显。这意味着通过添加这样的注释,我将在该库上创建编译时依赖项。我可以忍受。
但是,我不想要求jOOQ API的消费者将这种依赖性添加到运行库中。应该可以运行jOOQ而不会遇到任何import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Retention;
class Annotated {
@Annotation
public static void main(String[] args) {
System.out.println("works");
}
}
@Retention(RUNTIME)
@interface Annotation {}
等等。
我做了以下测试:
Annotated.class
然后我将Annotation.class
复制出项目(没有focus_set()
)并运行它。它按预期印刷了“作品”。
这可以保证有效吗?如果是/否,为什么?
注意:我知道this Q&A,但我正在寻找这种行为的JLS风格的正式证明。另外:我提供了比严格需要更多的上下文,因为可能还有另一个解决方案。