2016-09-05 62 views
0

在我作爲Java程序員的實踐中,我會發現諸如sun.reflect.Reflectionsun.misc.Unsafe等類提供的方法在某些情況下非常有用,例如編寫調用者敏感代碼的能力。但是,強烈建議不要使用應用程序代碼sun.reflect和相關軟件包,因爲它不是公共API。此功能未添加到Java標準庫中的原因是什麼?有時候我會覺得Java API開發人員不相信程序員能夠考慮這些方法的潛在風險,並且有意識地決定何時使用這些方法是合理的。爲什麼類如sun.reflect.Reflection不是公共API?

注意:我的問題是而不是是'使用Sun專有的Java類是不好的做法'的副本?在那裏,問題是,爲什麼不應該使用這些類。我的問題是爲什麼他們沒有被添加到'好使用'的API中。

+2

[這是一個不好的做法,使用Sun的專有的Java類?(http://stackoverflow.com/questions/1834826/it-is-a-bad-practice-to-use-suns-proprietary-java-類) – Pshemo

回答

0

這不僅是因爲他們不信任開發者。私有API可以自由更改,因爲像我們這樣的開發人員並沒有編寫依賴於他們的代碼,而是以特定的方式運行。 Java具有強大的向後兼容性概念,因此公共API不會以突破方式改變,但使用JDK的人員可以修改和增強私有API,而不用擔心打破現有系統。這使您可以更新您的生產系統上的Java版本相對安全也是如此,而不是讓我們說1.5只是安裝,因爲你在寫1.5程序。

+0

的確,所以我想知道爲什麼這些類不能添加到記錄完備的,與backwords兼容的公共API。 – Beethoven

+0

他們有時是(反射存在畢竟),但它使更難的JDK開發人員提供了穩定的API,如果他們給過於強大的工具來開發。您可以使用'Unsafe.park()'比使用標準API更容易使應用程序死鎖。 – Kayaman

相關問題