如果您使用 Sun 专有的 Java 类,编译器会显示警告。我认为使用这些类通常是一个坏主意。我在某处读到过这个。然而,除了警告之外,还有什么根本原因不应该使用它们吗?
因为它们是内部 API:它们可能会以“未记录”或“不受支持”的方式进行更改,并且它们绑定到特定的 JRE/JDK(在您的情况下是“Sun”),从而限制了程序的可移植性。 尽量避免使用此类 API,始终首选公共记录和指定的类。
JDK 6 文档包含一个标题为
关于 的链接。 这是 Java 1.2 文档中的文档,因此对 sun.*
的引用应视为 com.sun.*
Sun 包含的类 Java 2 SDK,标准版,秋季 分为包组
java.*
、javax.*
中的课程是 存在于 SDK 中以支持 Sun Java平台的实现:org.*
和
。除了sun.*
之外的所有内容 包是标准的一部分 Java平台并将受支持 进入未来。一般来说,包 例如sun.*
,位于范围之外 Java平台,跨平台可以不同 操作系统平台(Solaris、Windows、Linux、 Macintosh 等)并且可以随时更改 SDK 版本的时间恕不另行通知 (1.2、1.2.1、1.2.3 等)。节目 包含对sun.*
的直接调用 软件包不是 100% 纯 Java。sun.*
和每个实施Java的公司 平台将自行这样做 私人方式。sun.*
sun.*
尝试使用非 Sun JVM 运行代码,看看会发生什么......(您的代码将因 ClassNotFound 异常而失败)
是的,因为没有人保证这些类或 API 与下一个 Java 版本相同,而且我敢打赌,不能保证这些类在其他供应商的 Java 版本中可用。
因此,您将代码耦合到特殊的 Java 版本,并至少失去了可移植性。
Sun 专有的 Java 类是其 Java 实现的一部分,而不是 Java API 的一部分,其使用未记录且不受支持。由于它们是内部的,因此可以出于 Sun JVM 团队决定的任何原因随时进行更改。
而且 Sun 的 Java 实现并不是唯一的!您的代码将无法移植到 Oracle/BEA 和 IBM 等其他供应商的 JVM。
这是 Oracle 的答案:
为什么开发人员不应该编写调用“sun”包的程序com.sun.net.httpserver.*
类系列,用于创建小型嵌入式
http(s)