爲什麼程序員不應調用“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的一個主要的優點。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章