如何为@since 标签扫描Java 标准API 的所有javadoc?
How to scan all javadocs of the Java standard API for the @since tag?
我想制作 Java 版本到 classes 的映射,它们的方法和枚举值自这些版本以来就存在于标准 Java API 中。例如,标准 class String
自 Java 1.0 以来就存在,而 String::strip()
方法自 Java 11 以来就存在。class 和方法都有@since
标签在他们的 javadocs 中有适当的 Java 版本,这就是我想以编程方式扫描的内容。
也许还有另一种方法,与javadoc无关?例如,自 Java 9 以来,编译器支持 -release
参数,除其他事项外,该参数检查所用 API 与所选版本的 Java 版本的兼容性。在 -release 10
和带有 String::strip()
的代码的情况下,将抛出编译错误。编译器是如何做到的?它是在每次编译期间扫描 src.zip
中的 javadoc 还是使用更智能的技术?
解析 @since
可能是 error-prone 因为有一些陷阱:
- 尤其是方法不一致;例如
String.startsWith(String)
has @since 1.0
but String.endsWith(String)
没有 @since
标签
- 覆盖方法的值可能是意外的,请参阅JDK-8254572
- 可能有误。该值未以任何方式验证,因此它可能不正确,例如:JDK-6372816, JDK-8164057, JDK-8260561
如果您作为开发者只想知道添加了哪些新 API,您可以查看 "New" tab of the documentation, added in Java 17 by JDK-8265055(这是基于 @since
信息)。
javac
的 --release
选项使用 JDK 安装中的文件 lib/ct.sym
,该文件存储有关 public API 的信息之前的版本。请参阅 JEP 247 的“实施”部分。然而,这也有一些陷阱:
- 不再支持旧版本;例如 Java 12 和更新的 does not support Java 6
- 目前不包含有关unsupported API的信息;最突出
sun.misc.Unsafe
然而,third-party 工具允许您生成或比较 Java API 签名:
我想制作 Java 版本到 classes 的映射,它们的方法和枚举值自这些版本以来就存在于标准 Java API 中。例如,标准 class String
自 Java 1.0 以来就存在,而 String::strip()
方法自 Java 11 以来就存在。class 和方法都有@since
标签在他们的 javadocs 中有适当的 Java 版本,这就是我想以编程方式扫描的内容。
也许还有另一种方法,与javadoc无关?例如,自 Java 9 以来,编译器支持 -release
参数,除其他事项外,该参数检查所用 API 与所选版本的 Java 版本的兼容性。在 -release 10
和带有 String::strip()
的代码的情况下,将抛出编译错误。编译器是如何做到的?它是在每次编译期间扫描 src.zip
中的 javadoc 还是使用更智能的技术?
解析 @since
可能是 error-prone 因为有一些陷阱:
- 尤其是方法不一致;例如
String.startsWith(String)
has@since 1.0
butString.endsWith(String)
没有@since
标签 - 覆盖方法的值可能是意外的,请参阅JDK-8254572
- 可能有误。该值未以任何方式验证,因此它可能不正确,例如:JDK-6372816, JDK-8164057, JDK-8260561
如果您作为开发者只想知道添加了哪些新 API,您可以查看 "New" tab of the documentation, added in Java 17 by JDK-8265055(这是基于 @since
信息)。
javac
的 --release
选项使用 JDK 安装中的文件 lib/ct.sym
,该文件存储有关 public API 的信息之前的版本。请参阅 JEP 247 的“实施”部分。然而,这也有一些陷阱:
- 不再支持旧版本;例如 Java 12 和更新的 does not support Java 6
- 目前不包含有关unsupported API的信息;最突出
sun.misc.Unsafe
然而,third-party 工具允许您生成或比较 Java API 签名: