Java可以帮助我避免equals()中的样板代码吗? [英] Can Java help me avoid boilerplate code in equals()?
本文介绍了Java可以帮助我避免equals()中的样板代码吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我实现了Java 7方式的equals():
I implement equals() the Java 7 way:
@Override
public boolean equals(Object obj)
{
if (this == obj) return true;
if (obj == null) return false;
if (getClass() != obj.getClass()) return false;
MyClass other = (MyClass) obj;
return Objects.equal(myFirstField, other.myFirstField) &&
Objects.equal(mySecondField, other.mySecondField);
}
有没有办法减少代码重复?
Is there a way to reduce the code duplication?
我希望类似
@Override
public boolean equals(Object obj)
{
if (Objects.equalsEarlyExit(this, obj)) return Objects.equalstEarlyExitResult(this, obj);
MyClass other = (MyClass) obj;
return Objects.equal(myFirstField, other.myFirstField) &&
Objects.equal(mySecondField, other.mySecondField);
}
或类似。
推荐答案
具有自动装箱和对象创建效率低下的标准API Java:
Standard API Java with autoboxing and object creation inefficiencies:
import static java.util.Arrays.*;
import java.util.List;
class BrevityBeforeEfficiency {
int foo;
Object bar;
boolean baz;
@Override
public boolean equals(Object obj) {
return (obj instanceof BrevityBeforeEfficiency)
&& ((BrevityBeforeEfficiency) obj).values().equals(values());
}
@Override
public int hashCode() {
return values().hashCode();
}
private List<?> values() {
return asList(foo, bar, baz);
}
}
这篇关于Java可以帮助我避免equals()中的样板代码吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文