Reflection 如何在Gosu中调用私有方法
我试图使用invoke()方法从gosu scratchpad调用一个私有方法。但我无法访问该私有方法。 有谁能告诉我在GOSU语言中调用私有方法的最佳方法吗Reflection 如何在Gosu中调用私有方法,reflection,gosu,guidewire,Reflection,Gosu,Guidewire,我试图使用invoke()方法从gosu scratchpad调用一个私有方法。但我无法访问该私有方法。 有谁能告诉我在GOSU语言中调用私有方法的最佳方法吗 try{ var clazz = java.lang.Class.forName(ClaimSearchCriteriaImpl) var method = clazz.getDeclaredMethod("generateSimpleActiveClaimViewQuery", null) method.s
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)
**请尝试此代码。。您没有实例化**
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)
}
@Shivanandam Sirmaigari的解决方案现在确实有效,但存在一些问题 1如前所述,您需要在Method.invoke文档中的on对象实例上运行 /**@param obj从中调用基础方法的对象*/ 公共对象调用(对象对象、对象…参数) 第二,ClaimSearchCriteriaImpl实际上没有默认的构造函数,因此需要使用
var obj = clazz.getDeclaredConstructor({ConstructorArgType}).newInstance({argTypeObj})
第三,您的argTypeObj(可能是obj本身)实际上可能需要创建一个事务。难道“private”关键字的全部目的不是禁止其他类或对象使用带有该修饰符的方法吗?在我看来,这个应用程序正在按设计工作。你明白了吗?