java - 反射和多态

标签 java reflection ejb

我试图通过反射调用类中的方法。该方法位于 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/

相关文章:

c# - 在 C# 中使用反射获取嵌套对象的属性

c# - 通过反射使用泛型类型调用的方法上的动态 Linq

Java EE 部署问题

java - double 和 float 据类型的行为

java - 在 Java 中将 Oracle 函数作为字符串传递

c# - 使用 C# 上的反射以良好的格式获取 GenericType-Name

eclipse - 找不到 javax.ejb 包(Eclipse)

java - karaf 中的 Apache Felix 文件安装示例

java - 如何将 jzy3d 第三库中的聊天添加到 JFrame?

java - EJB - Home/Remote 和 LocalHome/Local 接口(interface)