我正在为大学考试写一个愚蠢的“聊天”
我要使用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”是客户端 在加入期间在线添加。
我做错了吗?
答案 0 :(得分:0)
我已经解决了:似乎无法通过引用直接比较UnicastRemoteObject,但是修改了equals方法来完成这项工作。
所以“c.equals(sender)”将正常工作,因为它在这种情况下内部比较引用