任何人都可以解釋這一段代碼我是那種對Java無法理解反射
Class c = Class.forName(telephony.getClass().getName());
Method m = c.getDeclaredMethod("getITelephony");
任何人都可以解釋這一段代碼我是那種對Java無法理解反射
Class c = Class.forName(telephony.getClass().getName());
Method m = c.getDeclaredMethod("getITelephony");
這就是所謂的反射。它在運行時訪問類,對象和方法而不是編譯時。它也不是針對Android的。
「Java的Reflection API允許在運行時檢查類,接口,字段和方法,而無需知道類的名稱,編譯時的方法等,也可以實例化新對象,調用方法和使用反射來獲取/設置字段值。「
telephony.getClass().getName()
提取字符串,其中包含對象telephony
的完全限定類名。
Class.forName(...)
使用完全限定名稱檢索Class對象。
c.getDeclaredMethod("getITelephony")
通過反射檢索Method
名爲"getITelephony"
。
BTW所有這些可以被重新寫爲如下:telephony.getClass().getDeclaredMethod("getITelephony")
Java反射允許執行Java程序來檢查或「內省」其自身,和操縱程序的內部性能。例如,Java類可以獲取其所有成員的名稱並顯示它們。
調用Class.forName("X")
會導致名爲X的類被動態加載(在運行時)。調用forName(「X」)會導致名爲X的類被初始化(即,JVM在類加載後執行其所有靜態塊)。 Class.forName("X")
返回與「X」類關聯的Class對象。返回的Class對象不是「x」類本身的一個實例。
Class.forName("X")
如果它尚未加載,則加載該類。 JVM跟蹤以前加載的所有類。該方法使用調用它的類的類加載器。 「X」是所需類的完全限定名稱。
getDeclaredMethod()
第二步是調用諸如getDeclaredMethod的方法來獲取由該類聲明的參數中給出的方法。
看這更多信息Reflection
這將返回與關聯的類的名字,他telephony
變量:
telephony.getClass().getName()
這將返回與您以前有名稱的參考類:
telephony.getClass().getName()
這是一種毫無意義的,因爲你可以這樣做:
第二行返回到表示在c
類getITelephony
方法的Method
對象的引用。
也許你正試圖獲得在自動機器人來電...
但重要的一點是,谷歌現在已經封鎖這是因爲ITelephony是一個私有API。
如果您認爲這個回答你的問題,請標記爲「接受」。這會提高你的和我的聲望得分。
那麼我們該怎麼做...? – maddy 2012-08-15 09:31:56
'Intent buttonUp = new Intent(Intent.ACTION_MEDIA_BUTTON); \t buttonUp.putExtra(Intent.EXTRA_KEY_EVENT,新的KeyEvent(KeyEvent.ACTION_UP,KeyEvent.KEYCODE_HEADSETHOOK)); \t context.sendOrderedBroadcast(buttonUp,「android.permission.CALL_PRIVILEGED」);' – 2012-08-15 10:20:25
註冊廣播接收者...並將以上代碼粘貼到onRecieve ... – 2012-08-15 10:23:03
什麼部分你不明白? – Blender 2012-08-15 07:29:41
我們如何可以聲明類和使用這種語法方法... – maddy 2012-08-15 07:30:32
看看[Java反射API。(http://docs.oracle.com/javase/tutorial/reflect/index.html) – adatapost 2012-08-15 07:31:57