Java 为什么要映射&x27;在hazelcast Map中,当比较对象时,强制使用equals方法
这更像是一个设计问题。我想知道为什么hazelcast使用对象的二进制(序列化)形式的Java 为什么要映射&x27;在hazelcast Map中,当比较对象时,强制使用equals方法,java,hazelcast,distributed-caching,distributed-cache,hazelcast-imap,Java,Hazelcast,Distributed Caching,Distributed Cache,Hazelcast Imap,这更像是一个设计问题。我想知道为什么hazelcast使用对象的二进制(序列化)形式的hashCode()和equals(),而不是复合键对象提供的形式 我遇到了一个问题,我必须将一些元数据(lastModifiedTimeStamp,lastModifiedNode等)与密钥对象关联,这是不可能的,因为存在此冲突 虽然我知道还有其他方法可以解决我的问题,但将这些属性作为密钥的一部分(然后覆盖hashCode()/equals()方法以排除元数据)将是一个更干净的方法。这是一个非常好的问题。原因
hashCode()
和equals()
,而不是复合键对象提供的形式
我遇到了一个问题,我必须将一些元数据(lastModifiedTimeStamp
,lastModifiedNode
等)与密钥对象关联,这是不可能的,因为存在此冲突
虽然我知道还有其他方法可以解决我的问题,但将这些属性作为密钥的一部分(然后覆盖
hashCode()
/equals()
方法以排除元数据)将是一个更干净的方法。这是一个非常好的问题。原因有多种,但其中之一可能是:
我们以序列化(=二进制)形式保存密钥。在另一种情况下,要从域对象中使用常规hashCode()和equals(),我们需要将它们设置为反序列化(对象)格式
仅仅这一事实就意味着:
-您总是需要所有集群成员上的域对象的.class文件。当成员仅处理序列化blob时,您不需要这样做
- 您可以只保留反序列化格式的键,但随后必须为每个远程请求序列化它们->性能损失。Hazelcast建立在一个假设之上,即您的大多数操作都是远程的
- 或者您可以在序列化和反序列化的表单->空格惩罚上维护键
Credits-Jaromir Hamala-Hazelcast邮件列表。@pveentjer,还有什么你能想到的吗?