2013-03-16 47 views
0

我正在使用CGLib動態更改TileEntity(我的世界)。在InvocationHandler中,我調用接口的Lua函數,但是我想要用Java調用已經存在的方法。 這是我的invoke方法:如何使用CGLib調用原始方法?

public Object invoke(Object arg0, Method arg1, Object[] arg2) 
      throws Throwable { 
     for (Method m : BaseTileEntity.class.getMethods()) { 
      if (m.equals(arg1)) { 
       return m.invoke(arg0, arg2); 
      } 
     } 
     return ((BaseTileEntity)arg0).file.call(arg1.getName(), arg2).arg(1); 
    } 

的問題是,調用該方法將調用相同的方法,而不是原來的方法。有沒有辦法調用原始方法?

+0

嗯,我不知道它是否真的重寫了invoke()。我正在實現CGLib的回調接口。 – Rule 2013-03-16 15:37:25

回答

1

找到了如何調用原始方法:實現MethodInterceptor而不是InvocationHandler。 MethodInterceptor的方法有一個額外的參數,可以使用.invokeSuper(arg0,arg2)調用原始方法。

相關問題