Java等于同一个类的两个对象的实现,在检查getClass()时返回false

提姆

我已经实现hashCode(),并equals()使用从NetBeans中默认的对象:

@Override
public int hashCode() {
    int hash = 5;
    hash = 37 * hash + this.unitSystemID;
    return hash;
}

@Override
public boolean equals(Object obj) {
    if (this == obj) {
        return true;
    }
    if (obj == null) {
        return false;
    }
    LOGGER.debug(getClass().toString());
    LOGGER.debug(this.getClass().getClassLoader().toString());
    LOGGER.debug(obj.getClass().toString());
    LOGGER.debug(obj.getClass().getClassLoader().toString());
    if (getClass() != obj.getClass()) {
        return false;
    }
    final UnitSystem other = (UnitSystem) obj;
    if (this.unitSystemID != other.unitSystemID) {
        return false;
    }
    return true;
}

在日志记录检查点,我得到:

units.UnitSystem-com.utilities.domain.units.UnitSystem类

units.UnitSystem-org.springframework.boot.devtools.restart.classloader.RestartClassLoader@42d353e2

units.UnitSystem-类com.utilities.domain.units.UnitSystem _ $$ _ jvst6b1_19ed

units.UnitSystem-org.springframework.boot.devtools.restart.classloader.RestartClassLoader@42d353e2

相等性此时equals失败,并返回false。

还有什么_$$_jvst6b1_19ed它从何而来?

据我了解,如果这些类来自相同的类加载器,则它们应该相等。在其他任何我使用过的地方,这个实现都没有问题。为什么要getClass()退回不同的东西?

安德烈亚斯

除非您实际上UnitSystem自己继承了子类,否则不需要精确的类匹配,因此请替换

if (getClass() != obj.getClass()) {
    return false;
}

if (! (obj instanceof UnitSystem)) {
    return false;
}

您不能创建UnitSystem类,final因为您希望Hibernate能够创建子类代理,因此您没有绝对的保证UnitSystem不会被非Hibernate代码子类化,但是确实需要这样的绝对保证吗?

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

检查两个(智能)指针是否指向同一个派生类

如何使同一个类的两个对象相互通信?

从同一个类中获取两个移动的对象进行交互(pygame)

Lua“类”的两个实例是同一个“对象”

在同一个容器下返回两个li对象

java.lang.NoSuchMethodError,两个类都在同一个JAR中!

我应该在同一个类中实现这两个接口吗?

在同一个方法中使用两个对象,最好的实现是什么?

在每个jvm级别使用==运算符时,同一个类的两个对象之间的清晰比较是什么?

Python3:来自同一个类的两个对象有何不同?

将同一个对象添加到两个列表时,内存是否会增加?

如何在android的同一个活动中实现两个按钮?

检查两个路径是否指向同一个文件

如何检查两个方法引用是否引用同一个方法?

===当两个引用都应指向同一对象时,在Nashorn中返回false

两个引用指向内存中的同一个对象但在java中独立工作?

在同一个编译单元中声明两个类

同一个 Android getIntent() 可以从两个不同的类接收吗?

如何组合两个在同一个类名上触发的函数?

Django:两个不同的子类指向同一个父类

我可以从同一个jar文件执行两个不同的类吗?

React.js不会区分同一个类的两个组件

针对具有两个不同父类的同一个孩子

同一个类中的两个函数不能互相访问

从同一个包编译两个类

在同一个函数中打印两个条件的返回?

一个页面上同一个javascript类的两个实例引用同一个实例

静态强制两个对象是从同一个(Int)“种子”创建的

引用同一个对象问题的两个实例