爲何程序員不該調用「sun」包?

J2SE API Documents是咱們最經常使用的參考手冊,但細心的朋友可能會發現,在「%JAVA_HOME%\jre\lib\rt.jar」中包含比API文檔更多的類,那麼其它的類爲何沒有在幫助文檔中出現呢?在SUN的JDK FAQ中有一篇「Why Developers Should Not Write Programs That Call 'sun' Packages」,該文部分地解答了這個問題,我將原文翻譯以下 ================================================================================ J2SE中的類大體能夠劃分爲如下的各個包: java.*,javax.*,org.*,sun.* 除了「sun」包,其它各個包都是Java平臺的標準實現,而且從此也將被繼續支持。通常說來,「sun」之類的包並不包含在Java平臺的標準中,它與操做系統相關,在不一樣的操做系統(如Solaris,Windows,Linux,Mac等等)中的實現也各不相同,而且可能隨着J2SE版本不按期變化。所以,直接調用「sun」包的程序代碼並非100%的Java實現。也就是說: 「java.*」包,「javax.*」包,「org.*」 包是做爲J2SE的API公開接口的一部分,若是程序直接調用這些包中的API,那麼程序是能夠運行在全部Java平臺上,而與操做系統無關;但 「sun.*」包並非API公開接口的一部分,調用「sun」包的程序並不能確保工做在全部Java平臺上,事實上,這樣的程序並不能工做在從此的 Java平臺上。 正由於如此,「sun.*」包中的類並無提供API文檔。平臺無關性是Java語言最大的優點之一,此外,SUN和 Java許可證確保維持了從此API的向上兼容性(之後修改的那些有嚴重bug的代碼除外)。這種兼容性意味着你寫好的程序編譯成的cl ass文件仍然能夠工做在未來的版本當中。 每家實現Java平臺的廠商均可以使用他們本身的方式。「sun.*」包中的類是SUN 對Java平臺的實現方式,它們工做在Java 2 SDK的下層,這些類未必被其它Java 平臺開發商支持。好比你的Java程序若是調用了一個名爲 「sun.package.Foo」的類,將有可能產生「ClassNotFoundError」的錯誤,同時你也將失去利用Java的一個主要的優勢。 從技術上講,並不能防止你的程序調用「sun.*」包中的類。在版本的變遷當中,這些類可能會被刪除或轉移到其它包路徑下,並且它的接口(包括名稱、標籤等)也頗有可能發生變化,(根據SUN的觀點,咱們應當可以經過對「sun.*」包的修改來提升Java平臺的性能。)在這種狀況下,即使你但願程序僅僅運行在SUN的實現平臺下,你仍將承受新的版本給你的系統帶來破壞的風險。總之,編寫依賴於「sun.*」包的Java程序是不安全的,他們將變得沒法移植,沒法被很好地支持。
相關文章
相關標籤/搜索