我需要在Android SDK v9中調用方法,同時保持與舊版本的兼容性。向後兼容Android
Android developer blog建議使用反射或包裝類,但是這一切都真的有必要嗎?爲什麼我不能這樣做?
if (Build.VERSION.SDK_INT >= 9)
callNewMethod();
在我看來,這將工作由於Java運行時鏈接,因爲我正在與SDK 9建設。這種方法有什麼問題嗎?
在此先感謝...
我需要在Android SDK v9中調用方法,同時保持與舊版本的兼容性。向後兼容Android
Android developer blog建議使用反射或包裝類,但是這一切都真的有必要嗎?爲什麼我不能這樣做?
if (Build.VERSION.SDK_INT >= 9)
callNewMethod();
在我看來,這將工作由於Java運行時鏈接,因爲我正在與SDK 9建設。這種方法有什麼問題嗎?
在此先感謝...
根本沒有。實際上,它是在開發具有廣泛API級別目標的應用程序時被推廣爲最佳方法的。
如果您不知道類內容和方法是否存在,則反射類是最堅實的方法。但在Android中,您知道什麼是受支持的,哪些不受支持。
因此,我不喜歡你給的博客:p
不一定是更好的答案,但你在那裏做檢查假定OS/ROM的建設者正確設置該值。如果設置不正確,則可能嘗試訪問SDK 9中實際不存在的方法。使用反射是通過嘗試調用不存在的方法100%確定不會生成運行時錯誤的唯一方法。
這正是我所做的,對我一直工作得很好。但是,這只是我的0.02美元,我們會看到如果有人可以給出比這更好的答案... – Eric 2012-07-24 18:35:45
而不是使用數字9作爲API級別,使用Build.VERSIONS.XXX其中xxx是由谷歌定義的API版本。只是說:D。 – 2012-07-24 18:40:46
只是猜測:由於Java是一種靜態編譯的語言,因此每個編譯單元(Java中的一個類)都有一個依賴項的列表,在運行該單元的代碼之前由加載程序解決。如果使用callNewMethod(),如果在運行時沒有callNewMethod(),則可能無法加載類。 – Javier 2012-07-24 18:43:18