Java 无法强制转换Naming.lookup(url)或返回空值

Java 无法强制转换Naming.lookup(url)或返回空值,java,rmi,Java,Rmi,在我的RMI代码中,这一行出现异常: RMIImplementation factory = (RMIImplementation) Naming.lookup(url); 例外情况是: java.lang.ClassCastException: com.sun.proxy.$Proxy0 cannot be cast to sjdproject.remoteRMI.RMIImplementation 这告诉我,不能将Naming.lookup

在我的RMI代码中,这一行出现异常:

        RMIImplementation factory
                = (RMIImplementation) Naming.lookup(url);
例外情况是:

java.lang.ClassCastException: com.sun.proxy.$Proxy0 cannot be cast to sjdproject.remoteRMI.RMIImplementation
这告诉我,不能将Naming.lookup(url)强制转换为RMI实现的对象

现在,RMI实现扩展了一个接口RMI接口,它本身扩展了Remote。若我把RMI接口放在RMI实现的地方,我不会得到异常,但工厂最终是一个空值

这是怎么回事

  • 您必须强制转换到远程接口,而不是实现类。这就是远程接口存在的原因

  • 如果将null与Naming.bind()绑定,则只能从Naming.lookup()获取null


  • 我的结论是,您捕获了一个异常并忽略了它,然后继续使用一个仍然为null的变量。

    Ok,一旦我更改为(RMI接口)命名。查找(url),factory将返回null。Naming.lookup(url)返回一个对象,但将其强制转换到接口会返回null,为什么?将非null对象强制转换到接口不会返回null。再试一次。很明显,正如我上面所说的,您忽略了一个例外。贴上你的头巾。把它编辑成你的问题。。我问了这个问题,给出了我的RMI包的代码,数据库接口请不要重复发布。在你原来的帖子中继续对话。但是那里的代码没有显示上面(1)的正确值。我会记住这一点。但是,如果我陷入了困境,15个小时陷入了一个我根本不懂的问题,没有人回答一个问题,那么我肯定要用另一种方式问同样的问题