考虑委托中的方法
Public void findThisMethod(String a,Set b,HashSet c){}
所以从action am gng到使用方法id和参数类型映射此方法。使用。
Object[] arguments = new Object[] {a,b,c}
for (int i = 0 ; i < arguments.length ; i++){
argumentTypes[i] = arguments[i].getClass();
}
Method invokeMethod = delegateClass.getDeclaredMethod(methodID,argumentTypes);
returnObj = invokeMethod.invoke(delegateObj,arguments);
...问题::这不是wotking因为Set是一个界面!任何人都可以告诉我如何正确映射界面????
答案 0 :(得分:1)
通常,在尝试为方法调用选择最佳重载方法时,需要像编译器一样花费相同的工作量。
在您的情况下,如果给定参数a, b, c
存在方法,则必须进行测试。如果没有,那么你必须查看超类型和接口。
您可以这样做:反过来:获取可用方法的集合,并为参数向量创建候选方法的优先级列表。
答案 1 :(得分:1)
如果您正在使用getDeclaredMethod查找方法的签名,那么您应该提供此签名的pameters的确切类型,而不是子类。子类化将由编译器解决,但它对内省没有帮助。
明确提供参数的类型,不要像对象那样从对象中获取它们。你应该有像
这样的东西delegateClass.getDeclaredMethod(methodID, new Class[] { String.class, Set.class, HashSet.class } );
答案 2 :(得分:1)