【问题标题】:What is inside com.sun package?com.sun 包里面有什么?
【发布时间】:2023-03-14 20:58:01
【问题描述】:

就像javax 包含扩展,com.sun 包应该包含什么?

【问题讨论】:

  • 我想像com.sun.mail.smtpcom.sun.net.httpserver 这样的东西。 google.ca/…

标签: java


【解决方案1】:

它包含标准 Java (EE) API 的 Sun Oracle 参考实现。其中Mojarra(Oracle 的参考 JSF 实现)和Glassfish(Oracle 的参考 Java EE 实现)使用此包。最好不要直接在您的代码中使用这些类,因为它会使您的代码与实现紧密耦合。直接针对java(x) API 进行编码使您能够在不更改代码的情况下更改实现(例如,使用 MyFaces 代替 Mojarra 和 JBoss AS 代替 Glassfish)。 JDK 自己的HttpServer 也位于com.sun.* 包中,请参阅Simple HTTP server in Java using only Java SE API

请注意,com.sun.* 包不应与 sun.* 包混淆,后者是 Oracle JRE 背后的内部类,您应该在代码中 absolutely not 导入/使用它,因为它会使您的代码与JRE 品牌/版本。完全不使用 sun.* 包可以让您在所有其他 JRE 实现(OpenJDK、GCJ 等)上运行您的代码。

【讨论】:

  • java. 使用 sun. 包的 API - 当它们本身依赖于不受支持的包时,它们如何保持支持?
  • @Lealo 因为它们是由同一个人维护的。
  • 这些人然后确保他们在 sun.package 中使用的任何东西都能正常工作?否则,他们会提出 - 或使用其他包来替换它们 - 从而保证他们自己的 java. 包继续工作。我理解正确吗?
  • @Lealo 不支持外部开发人员使用它们。如果根本不支持任何用途,那么它们的存在就没有任何意义。
  • @BalusC JEP 403 说了以下内容,这似乎与您关于一般可以使用 com.sum.* 包的说法相矛盾:“大多数 com.sun.* 包在JDK供内部使用”。然而,该文档提出了一些明确的例外。
【解决方案2】:

有很多地方使用com.sun 包(其中一些在其他答案中提到)。这个答案只是专门解决了在 JavaFX 中使用 com.sun 的问题。 JavaFX is a UI library which is part of OpenJDK.

很多JavaFX implementation is in com.sun classes。当 JavaFX 开源时,following comment 是由 JavaFX 开发人员针对 JavaFX 中 com.sun 类的使用提出的:

与往常一样,非公共 API(或者更确切地说,不受支持的 API,这意味着任何不在 javafx 命名空间中的东西,例如 com.sun.*)在不同版本之间都不能依赖。但是对于那些想知道事情是如何工作的人来说,在不受支持的包中隐藏着一些非常重要的东西,对于那些想要真正破解 OpenJFX 的人来说,这将更加有趣。

【讨论】:

  • 但这仅适用于 JavaFX。 com.sun 中还提供了所有 JNDI 和 JavaMail 提供程序,以及许多其他已记录的扩展,而且它们肯定可以在不同版本中依赖。
  • 是的,同意,有一些 Java 组件,例如 javamail,最终用户可以使用com.sun 类。但是对于这些库,相关的com.sun api 是该组件公开发布的 javadoc 的一部分。对于 JavaFX 和许多其他 Java 系统组件,情况并非如此,这些组件中的 com.sun api 保留供内部使用,未在已发布的 javadoc 中记录,最终用户不应使用。
【解决方案3】:

您不需要直接访问的供内部使用的软件包。它们可以在任何版本的 Java 中更改或删除。您可以在 OpenJDK 中找到所有 sun.* 和 com.sun.* 包的源代码。

【讨论】:

  • com.sun 命名空间不适用于 JDK 实现:oracle.com/technetwork/java/faq-sun-packages-142232.html
  • @raphw 你能添加一个支持你的陈述的链接吗?您的链接甚至没有提到 com.sun.*
  • 嗯,他们甚至没有提到com.sun.*,而是写了一个关于sun.* 使用的额外部分,这是第一个提示。此外,Sun Microsystem 在com.sunsearch.maven.org/#search|ga|1|com.sun 下发布了所有非JCL Java 代码,其中com.sun 类的使用显然是合法的。此外,一些 JDK 工具(如 doclet)是围绕 com.sun 命名空间构建的。
  • “com.sun 命名空间不适用于 JDK 实现”。这意味着什么?正如您在第二条评论中提到的那样,com.sun 是指定 JavaDoc 文档和标签的内容。
  • 有一个明确的警告 Oracle(以前由 Sun)不要使用 sun.* 包,因为它们包含内部 JVM 实现。 com.sun.* 命名空间不存在此类警告。唯一的一点是,这两个命名空间的共同点是 sun 这个词。这反映在这个问题的公认答案中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多