我试图通过反射调用类中的方法。该方法位于 ejb 类内部。我一直找不到方法。我编写了以下代码来调试该问题。其中一个参数( jar 内定义的接口(interface))似乎相同,但哈希码不同,这导致了问题。我已经验证了调用代码和 calee 代码中的 jar 版本。在调用代码中,哈希码在调用之间是相同的。但是在被调用者代码中,接口(interface)的哈希码不断更改任何指针??
private static Method findMethod( Class<?> encapsulatingClass, Class<?>[] paramArray, String methodName) {
Method[] methods = encapsulatingClass.getDeclaredMethods();
Method method = null;
for (int i = 0; i < methods.length; i++) {
method = methods[i];
Class<?>[] paramTypes = method.getParameterTypes();
if (method.getName().equals(methodName) ) {
if(paramTypes.length == paramArray.length){
for(int j = 0;j<paramTypes.length;j++){
if(!paramTypes[j].equals(paramArray[j])){
Debug.info("Method argument " + paramTypes[j].getName() + " hashcode = "
+ paramTypes[j].hashCode() + "Parameter " + paramArray[j].getName() + " Hashcode = " +
paramArray[j].hashCode());
if(paramTypes[j].getName().equals(paramArray[j].getName())){
Debug.info("Atleast Parameter name seems to be same");
}else{
Debug.info("Strange cant find a diff can u??");
Debug.info("String 1 = " + paramTypes[j].getName() + " String 2 = " + paramArray[j].getName());
}
}
}
}
break;
}
}
return method;
}
看起来您有不同的类加载器,它们都包含该类的副本。尽管这些类可能完全相等,但您不能互换使用它们,除非您序列化它们之间的对象(如 EJB 远程调用所做的那样)。
当您的客户端和服务器在不同的 JVM 中运行时,或者当您的应用程序服务器引入多个类加载器来提供应用程序隔离时,这种情况通常会发生。
我是一名优秀的程序员,十分优秀!