反射和多态性



我试图通过反射调用类中的方法。该方法位于ejb类中。我一直找不到方法。我编写了以下代码来调试这个问题。其中一个参数(在jar中定义的接口)似乎是相同的,但哈希码不同,这导致了问题。我已经验证了调用和调用代码中的jar版本。在调用代码中,各个调用的哈希码是相同的。但在调用代码的哈希码接口不断改变任何指针??

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中,或者当您的应用服务器引入多个类加载器以提供应用程序隔离时,通常会发生这种情况。

相关内容

  • 没有找到相关文章

最新更新