【问题标题】:When to use java.* and jdk.* packages何时使用 java.* 和 jdk.* 包
【发布时间】:2021-08-06 13:45:38
【问题描述】:

我正在使用 IntelliJ 和 JDK 11。在库包中,我看到两种类型的包命名。 java.*jdk.* 如下图所示:

jdk.* 包里面有sun.* 包。这对开发人员意味着什么?避免使用jdk.*/sun.* 的一般建议是否写在这里:https://www.oracle.com/java/technologies/faq-sun-packages.html

【问题讨论】:

  • 在这里猜测:jdk.* 包似乎与 jdk 的实际编译器有关。我认为最好遵循给定 oracle 链接的建议。如果您使用 java.javax.org. 以外的任何其他内容,则在不同的 jvm(例如 graalvm)上运行时可能会遇到问题

标签: java java-11 sun


【解决方案1】:

你误读了:这些不是包,而是模块。

您应该使用java.* 模块并避免使用jdk.*,因为它们的访问/api 不能保证是稳定的。 sun(和com.sun.*)大多被移到jdk.*模块中。

这一切都归结为JEPs

JDK的模块化结构实现了以下原则:

  • 规范由 JCP 管理的标准模块的名称以字符串“java.”开头。

  • 所有其他模块只是 JDK 的一部分,名称以字符串“jdk.”开头。

【讨论】:

  • 好的,谢谢。我对jdk.crypto.cryptoki 模块感兴趣。只使用github.com/openjdk/jdk/tree/… 并自己维护它是个好主意吗?
  • 尝试使用java.* 模块。除非您是该模块的维护者或希望维护该模块...尝试使用java.security.Provider
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-11
  • 1970-01-01
  • 2021-01-04
  • 2019-11-13
  • 2011-06-12
  • 1970-01-01
相关资源
最近更新 更多