相关疑难解决方法(0)

为什么@Documented注释具有运行时保留?

据我所知,@Documented注释仅由javadoc生成器用于从源生成javadoc.所以保留类型应该是SOURCE,但它是RUNTIME.为什么?

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Documented {
}
Run Code Online (Sandbox Code Playgroud)

java annotations javadoc

5
推荐指数
1
解决办法
289
查看次数

@FunctionalInterface如何影响JVM的运行时行为?

我最初的问题是这个问题的完全重复; 也就是说,为什么这个接口有一个运行时保留策略.

但是接受的答案根本不能满足我,原因有两个:

  • 事实上这个界面@Documented(我相信)与它无关(虽然为什么@Documented运行时保留策略对我来说也是一个谜);
  • 尽管在Java 8之前Java中存在许多"将来"功能接口(Comparable正如答案所提到的那样,但也Runnable等),这并不妨碍它们被用作"替代品"(例如,你可以完美地使用DirectoryStream.Filteras作为例如,Predicate如果您所做的只是过滤Path,则替换为a .

但是,它仍有这种保留.这意味着它必须以某种方式影响JVM行为.怎么样?

java annotations java-8

5
推荐指数
1
解决办法
116
查看次数

Java运行时保留批注在以前的Java版本中的兼容性

我想@FunctionalInterface在我的代码中使用Java 8,但我希望能够使用Java 6生成的类文件.我认为我应该将源代码版本1.8和目标版本改为1.6.

我将@FunctionalInterface仅用于文档,但我注意到它有@Retention(RetentionPolicy.RUNTIME).如果没有人使用该注释,它会导致问题吗?

如果有人在运行时迭代我的对象的注释,它是否会导致缺少类异常?但是,如果这是真的,那么Google Guava如何声明JSR 305注释依赖关系以提供Maven <scope>,这意味着注释如javax.annotation.Nonnull在运行时也会在Guava中丢失,而不会导致问题?

让我用另一种方式问:如果我在项目中使用Google Guava但不包含JSR 305依赖项,那么如果我对代码使用反射,我是否真的会冒一些错误?如果是这样,会发生什么错误?如果不会发生错误,那么类似地,我可以使用@FunctionalInterfaceJava版本编译的源代码中的注释,1.8但是1.6没有任何运行时错误的风险,甚至使用反射?

java annotations runtime maven

3
推荐指数
1
解决办法
492
查看次数

标签 统计

annotations ×3

java ×3

java-8 ×1

javadoc ×1

maven ×1

runtime ×1