Java:如何比较UnicastRemoteObject / Remote?

时间:2015-02-21 11:03:54

标签: java comparison chat rmi

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

我要使用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”是客户端 在加入期间在线添加。

我做错了吗?

1 个答案:

答案 0 :(得分:0)

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

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