2013-06-05 24 views
3

我是新來的反射,作爲事實上,我從來沒有使用它,直到我遇到了以下問題 -爲什麼只有使用反射才能使用此Java方法?

我試圖用一種稱爲一類稱爲資源定義getCompatibilityInfo的方法,但我看到這樣做的唯一方式就是這樣稱呼它:

Resources.class.getMethod("getCompatibilityInfo"); 

我可以使用一種稱爲getResources()方法資源的實例,那麼爲什麼使用getResources().getCompatibilityInfo()是不是訪問?

類的源代碼是here

謝謝!

+0

因爲instanciating資源是不夠的。你已經看到了代碼,你知道構造函數有一些參數,空的構造函數是私有的,因爲它僅用於系統資源。 – njzk2

+3

因爲「@ hide」註釋 請參閱http://stackoverflow.com/questions/7888191/how-do-i-build-the-android-sdk-with-hidden-and-internal-apis-available – farincz

+0

@Heuster,它不會編譯。 –

回答

2

Resources還沒有一個空的公共構造函數。所以new Resources()會給你一個編譯時錯誤,也getCompatibilityInfo()不是公共API

+0

你說得對,我忘了寫正確的方法。我編輯了我的問題,現在我使用getResources獲取實例。不過,它不會編譯... –

2

這東西,只有發生在安卓,因爲的android.jar擁有所有標有@hide去除方法的一部分。這隻在編譯時很重要,因爲android.jar僅用於開發。

關於this answer的詳細解釋。