簡體   English   中英

使用 Sun 的專有 Java 類是一種不好的做法嗎?

[英]It is a bad practice to use Sun's proprietary Java classes?

如果您使用 Sun 的專有 Java 類,編譯器會顯示警告。 我認為使用這些類通常是一個壞主意。 我在某處讀到過這個。 但是,除了警告之外,還有什么根本原因不應該使用它們嗎?

因為它們是內部 API:它們可能會以未記錄不受支持的方式更改,並且它們綁定到特定的 JRE/JDK(在您的情況下為Sun ),從而限制了程序的可移植性。

盡量避免使用此類 API,始終更喜歡公共記錄和指定的類。

JDK 6 文檔包含一個名為Note About sun.* Packages的鏈接。 這是來自 Java 1.2 docs 的文檔,因此對sun.*引用應該被視為他們說的是com.sun.*

其中最重要的幾點是:

Sun 包含在 Java 2 SDK 標准版中的類屬於包組java.*javax.*org.*sun.* 除了sun.*包之外的所有包都是 Java 平台的標准部分,將來會得到支持。 通常,Java 平台之外的諸如sun.*軟件包在不同的操作系統平台(Solaris、Windows、Linux、Macintosh 等)之間可能會有所不同,並且可以隨時更改,恕不另行通知 SDK 版本(1.2、 1.2.1、1.2.3 等)。 包含直接調用sun.*包的程序不是 100% 純 Java。

每家實現 Java 平台的公司都會以自己的私人方式來實現。 sun.*中的類存在於 SDK 中以支持 Java 平台的 Sun 實現: sun.*類是使 Java 平台類在“幕后”為 Sun Java 2 SDK 工作的原因。 這些類通常不會出現在其他供應商的 Java 平台上。 如果您的 Java 程序通過名稱請求類“sun.package.Foo”,它可能會因 ClassNotFoundError 而失敗,並且您將失去使用 Java 開發的主要優勢。

嘗試使用非 Sun JVM 運行您的代碼,看看會發生什么......

(您的代碼將因 ClassNotFound 異常而失敗)

是的,因為沒有人保證這些類或 API 會與下一個 Java 版本相同,而且我敢打賭,不能保證這些類在其他供應商的 Java 版本中可用。

因此,您將代碼耦合到特殊的 Java 版本,並且至少失去了可移植性。

Sun 的專有 Java 類是其 Java 實現的一部分,而不是 Java API 的一部分,它們的使用未記錄且不受支持。 由於它們是內部的,因此可以出於使用 Sun JVM 的團隊決定的任何原因隨時更改它們。

Sun 的 Java 實現並不是唯一的! 您的代碼將無法移植到來自其他供應商(如 Oracle/BEA 和 IBM)的 JVM。

我最近有一個案例,顯示了使用這些類時可能會遇到的實際問題:我們的代碼無法編譯,因為它在 sun.* 上使用的方法在 Ubuntu 上的 OpenJDK 中根本不存在。 所以我猜在使用這些類時,你不能再說“這適用於 Java 5”之類的話,因為它只適用於某個 Java 實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM