【问题标题】:Java: How to compare UnicastRemoteObject / Remote?Java:如何比较 UnicastRemoteObject / Remote?
【发布时间】:2023-10-23 19:17:02
【问题描述】:

我正在为大学考试写一个愚蠢的“聊天”

我必须将 RMI 与 rmic 和 rmiregistry 一起使用(旧方法)

但我在比较远程对象时有一个奇怪的行为,例如在这段代码中:

public class Server extends UnicastRemoteObject implements ServerIFace {
[...]
private ArrayList<ClientIFace> online;
[...]
public boolean join(ClientIFace client) throws RemoteException {
    synchronized (online) {
        if (online.size() >= MAX_CLIENTS) {
            return false;
        }

        this._sendBroadcast("New User: " + client.getNickname(), null);

        online.add(client);

        [...]

接下来我在调用客户端和在线列表元素之间进行的每次比较都失败了:

private void _sendBroadcast(String mex, ClientIFace sender)
        throws RemoteException {
    for (ClientIFace c : online) {
        if (c != sender) {
            c.recvMsg(mex);
        }
    }
}

"if (c != sender)" 永远不会返回 false ,但 "sender" 是客户端 加入时在线添加。

我做错了吗?

【问题讨论】:

    标签: java comparison chat rmi


    【解决方案1】:

    我已经解决了:似乎 UnicastRemoteObject 不能通过引用直接比较,但是已经修改了 equals 方法来完成这项工作。

    所以 "c.equals(sender)" 将正常工作,因为在这种情况下它会在内部比较引用

    【讨论】: