我使用OCSF框架解释here,假设我使用sendToServer(Object msg)发送originalMssg,它使用带有套接字的java的Object流在客户端,然后在服务器端运行sendToClient(Object msg) )mssg对象与我从该客户端收到的对象相同。
现在,考虑一下在客户端代码从服务器收回mssg后调用的以下回调:
@Override
protected void handleMessageFromServer(Object msg) {
System.out.println(msg.equals(originalMssg));
}
答案 0 :(得分:1)
(这纯粹基于阅读OSCF网站和javadocs ... YMMV)
该网站称OSCF发送和接收可序列化的普通Java对象(POJO)。由此我推断msg
对象可以是任何可序列化类的实例。
在上面的场景中它会一直打印出来吗?
不可能说。这取决于实际类如何实现equals
。
如果不是在什么情况下不会?
不可能说(见上文)。
是否可以使它始终返回true?
嗯......您需要在发送/接收的班级上更改equals
方法的实现。
如果在所有情况下都返回false ...
不可能说这个先决条件是否成立(见上文)。
底线。 msg
是您自己实现或选择的某个类的实例。您可以使用符合您要求的equals
行为来实现/选择它...包括(显然)与从客户端到服务器再往返的对象实例的比较
答案 1 :(得分:1)
OSCF
的主要内容是发送String或字符串数组.....所以首先检查您的对象是否为serializable
。
然后,您为每个课程equals
提供@Override
方法。
1)NO。
2)几乎任何时候它都是假的,你可以尝试发送一个字符串一个对象,你应该成真。
3)请参阅我对我的回答的介绍。