gpt4 book ai didi

java - 反射和多态

转载 作者:太空宇宙 更新时间:2023-11-04 08:26:49 26 4
gpt4 key购买 nike

我试图通过反射调用类中的方法。该方法位于 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 中运行时,或者当您的应用程序服务器引入多个类加载器来提供应用程序隔离时,这种情况通常会发生。

关于java - 反射和多态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8338772/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com