2014-07-23 108 views
4

在我的項目中,我需要多次動態訪問不同對象的getter和setter。由於這一點,我想要一個動態訪問方法的快速方法。Android中是否有MethodHandle的等價物?

爪哇7引入的MethodHandle類用於動態地執行一個給定的類的方法。從我所看到的JDK的Android端口上沒有這樣的事情。除了使用標準反射類之外,是否有任何解決方法可用於規避此問題?

+0

「___使用標準反射類__」爲什麼? – Unihedron

+0

是否適用於簡單的getter/setter或更復雜的東西? – radai

+0

@Unihedron我的理解是MethodHandle會比標準反射更快,並且爲了我的需要,我需要比反射更快的方法。看到這裏的參考:http://stackoverflow.com/questions/14146570/calling-a-getter-in-java-though-reflection-whats-the-fastest-way-to-repeatedly – LazyOfT

回答

2

,你可以明顯地只得到適當的方法對象,並調用它。

,但如果你想要的東西更快,你可以在運行時生成的類調用你的目標的方法。所以你使用普通反射來定位方法,生成一個MethodCaller類,它實現了你事先定義的一些接口(callMethod()?),加載新生成的類並使用它。有一個兼容android runtime here的庫和一個長期的討論,其中列出了其他可能的替代品here

雖然這是可行的,它肯定是不容易的,我建議你嘗試正常的反映和測量性能。也許它會工作得很好。

+0

我擔心這樣的事情。我會研究一下,看看我能不能做到我想做的。 – LazyOfT

+0

我設法測試代碼,即使它有點複雜,它似乎工作。謝謝。 – LazyOfT

+0

看起來'Method'不會讓你直接調用超級方法(例如Method不能從'MyListViewSubclass#arrowScroll'調用'ListView#arrowScroll') – nmr

相關問題