我的Java类代表数据库中的实体,我发现重写类的equals
方法以按ID进行比较是可行的。例如,在我的Transaction
类中,我有这段代码
@Override
public boolean equals(Object other){
if (other == null) return false;
if (other == this) return true;
if (!(other instanceof Transaction))return false;
Transaction otherTrans = (Transaction) other;
if (id == null || otherTrans.id == null) return false;
return id.equals(otherTrans.id);
}
现在对我来说,每个类都拥有相同的代码段,而只更改了类的名称,这似乎有点丑陋。我考虑过让我的类扩展一个父类(super class)
MyEntity
,在其中我可以编写上述方法,用instanceof Transaction
之类的东西替换instanceof this.getClass()
,但这似乎是不可能的。我还考虑过用instanceof MyEntity
替换它,但这意味着即使两个对象属于不同的类,只要它们具有相同的id,也可以将它们视为相等。还有其他办法吗?
最佳答案
您可以使用instanceof
运算符的动态版本,这是Class
的isInstance
方法。
if (!(getClass().isInstance(other))) return false;
这不会阻止子类的实例在父类(super class)对象上测试
equals
,而是一种动态的方式来确保它是完全相同的类,即比较两个Class
对象是否相等。if (!(getClass().equals(other.getClass()))) return false;
关于java - 在不知道类型的情况下使用instanceof,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35280590/