You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Java RMI中com.sun.proxy.$Proxy0无法转型为自定义接口的问题

问题根因

你的BonjourClass远程实现类没有实现自定义的远程接口bonjourInterface1,仅继承了UnicastRemoteObject。RMI底层基于JDK动态代理生成远程存根,生成的代理类只会实现远程对象显式实现的Remote子接口,因此返回的代理对象不具备bonjourInterface1类型,强制转型就会抛出对应异常。

修复方案

修改BonjourClass的类声明,添加对bonjourInterface1接口的实现即可,修改后代码如下:

package RMI;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

// 新增implements实现远程接口
public class BonjourClass extends UnicastRemoteObject implements bonjourInterface1 {
    public BonjourClass() throws RemoteException {
        super();
    }
    // 建议添加@Override注解校验接口方法实现的正确性
    @Override
    public String Bonjour(String name) throws RemoteException {
        return "Bonjour si sayed "+name ;
    }
}

修改完成后清理所有历史编译的class文件,重新编译全量代码,先启动服务端再启动客户端即可正常运行。

额外注意事项
  • 服务端和客户端的bonjourInterface1、BonjourClass的包路径必须完全一致,否则也会触发类加载不匹配导致的类型转换异常
  • 建议遵循Java命名规范,接口名采用大驼峰命名,比如调整为BonjourInterface,提升代码可读性

内容的提问来源于stack exchange,提问作者Mazen haj ali the best

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 02:45:02