[英]How to invoke private method via Reflection when parameter of method is List?
[英]How to invoke private method in Gosu
我正在嘗試使用invoke()方法從gosu暫存器中調用私有方法。但是我無法訪問該私有方法。 任何人都可以告訴我用GOSU語言調用私有方法的最佳方法。
try{
var clazz = java.lang.Class.forName(ClaimSearchCriteriaImpl)
var method = clazz.getDeclaredMethod("generateSimpleActiveClaimViewQuery", null)
method.setAccessible(true)
var ss = method.invoke(clazz, null)as ClaimSearchCriteriaImpl
print("Result.."+ss)
} catch(exception){
print("***********"+exception)
}
當我嘗試執行此代碼時,出現以下異常
java.lang.IllegalAccessException: Class program_.__Program__505 can not access a member of class com.guidewire.cc.domain.claim.impl.ClaimSearchCriteriaImpl with modifiers "private"
at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:105)
at java.lang.reflect.AccessibleObject.slowCheckMemberAccess(AccessibleObject.java:261)
at java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:253)
at java.lang.reflect.Method.invoke(Method.java:599)
at program_.__Program__505.evaluate(Unknown Source)
at gw.internal.gosu.parser.GosuProgram.runProgram(GosuProgram.java:421)
at gw.internal.gosu.parser.GosuProgram.evaluate(GosuProgram.java:253)
at gw.internal.gosu.parser.GosuProgram_Proxy.evaluate(gw.internal.gosu.parser.GosuProgram_Proxy:2)
at gw.internal.gosu.parser.ExecutionEnvironment$1.evaluate(ExecutionEnvironment.java:543)
at gw.internal.gosu.parser.ExecutionEnvironment$1.runScript(ExecutionEnvironment.java:523)
at gw.internal.gosu.parser.ExecutionEnvironment$1.run(ExecutionEnvironment.java:489)
at java.lang.Thread.run(Thread.java:724)
@Shivanandam Sirmarigari的解決方案現在可以正常工作,但是存在一些問題。
如前所述,您需要從Method.invoke文檔中獲取on對象的實例才能在其上運行
/ ** @param obj從* /調用基礎方法的對象
公共對象invoke(Object obj,Object ... args)
2 ClaimSearchCriteriaImpl實際上沒有默認構造函數,因此您需要使用類似
var obj = clazz.getDeclaredConstructor({ConstructorArgType}).newInstance({argTypeObj})
第三,您的argTypeObj(可能是obj本身)可能實際上需要創建一個事務。
**嘗試使用此代碼。您未實例化**
try{
var clazz = java.lang.Class.forName(ClaimSearchCriteriaImpl)
var method = clazz.getDeclaredMethod("generateSimpleActiveClaimViewQuery", null)
Object obj= clazz.newInstance();
method.setAccessible(true)
var ss = method.invoke(obj, null)as ClaimSearchCriteriaImpl
print("Result.."+ss)
} catch(exception){
print("***********"+exception)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.