MethodHandler

Java是一個支持反射的語言,從誕生的那一刻起就已經支持了反射。經典的反射代碼能夠這樣寫:java

  • 能夠利用反射在運行時經過名字查找方法句柄,動態調用想要的方法。同時,上面的例子中也能夠發現,經過Method反射調用是支持多態的

可是從Java7開始,JDK中又多了一個功能相似的成員,java.lang.invoke.MethodHandle。先來看看MethodHandle又是怎麼用的:函數

  • MethodHandle反射調用也是支持多態的,而且和Method不一樣的是,MethodHandle的成員方法要線bindTo到某個instance,bind過程當中已經作了類型檢查
  • Method成員方法左值是和函數參數一塊兒傳入的

綜上,MethodHandle更像是在Java語法規則內手寫字節碼:本身建立方法簽名(MethodType),本身決定調用方式(invokestatic/invokespecial/invokevirtual),本身注意訪問控制(public/package/protected/private),最後還要本身決定類型隱式轉換;而Method權限則大得多。雖然MethodHandle能力相對受限,不過性能確高了不少(二者的實現對比解析待續…)。性能

相關文章
相關標籤/搜索