繁体   English   中英

为什么在hazelcast Map中违反了Map的一般合同,该合同要求在比较对象时强制使用equals方法

[英]Why Map's general contract, which mandates the use of the equals method when comparing objects is violated in hazelcast Map

这更多是一个设计问题。 我想知道为什么hazelcast使用对象的二进制(序列化)形式的hashCode()equals()而不是复合键对象提供的形式。

我遇到了一个问题,我不得不将一些元数据( lastModifiedTimeStamplastModifiedNode等)与键对象相关联,由于这种冲突,这是不可能的。

虽然我确实知道还有其他方法可以解决我的问题,但是将这些属性作为键的一部分(随后重写hashCode() / equals()方法以排除元数据)是一种更干净的方法。

这个问题问得好。 造成这种情况的原因有多种,但其中之一可能是:

我们将密钥以序列化(=二进制)形式保存。 另外,要从您的域对象中使用常规hashCode()和equals(),我们需要将它们以反序列化(对象)格式。

仅此事实本身就意味着:-您将始终需要所有群集成员上的域对象的.class文件。 当成员只处理序列化的Blob时,则不需要。

  • 您可以只将密钥保留为反序列化格式,但随后必须为每个远程请求将它们序列化->性能损失。 Hazelcast建立在大多数操作都是远程的假设基础上。

  • 或者,您可以同时使用序列化和反序列化形式的密钥->空间损失。

我确定还有其他原因; 这些只是我脑海中想到的几个。

积分-Jaromir Hamala-Hazelcast邮件列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM