比较java中两个可能为空的值
我有一个java类,类似这样:比较java中两个可能为空的值,java,null,Java,Null,我有一个java类,类似这样: class MyClass { MyClass(Object obj) { m_Obj = obj } private Object m_Obj; } @Override public boolean equals( Object obj) { if (!(obj instanceof MyObject)) return false; MyObject other
class MyClass {
MyClass(Object obj) {
m_Obj = obj
}
private Object m_Obj;
}
@Override
public boolean equals(
Object obj) {
if (!(obj instanceof MyObject))
return false;
MyObject other = (MyObject)obj;
if ((m_Obj == null) &&
(other.m_Obj == null)
return true;
if ((m_Obj == null) &&
(other.m_Obj != null)
return false;
if ((m_Obj != null) &&
(other.m_Obj == null)
return false;
return m_Obj.equals(other.m_Obj);
}
因为m_Obj可以为null,所以我的equals方法必须如下所示:
class MyClass {
MyClass(Object obj) {
m_Obj = obj
}
private Object m_Obj;
}
@Override
public boolean equals(
Object obj) {
if (!(obj instanceof MyObject))
return false;
MyObject other = (MyObject)obj;
if ((m_Obj == null) &&
(other.m_Obj == null)
return true;
if ((m_Obj == null) &&
(other.m_Obj != null)
return false;
if ((m_Obj != null) &&
(other.m_Obj == null)
return false;
return m_Obj.equals(other.m_Obj);
}
当我有多个类成员,这些成员可能是空的,也可能不是空的时,equals函数就变成了一个漫长的过程。我可以编写自己的函数:
public boolean equals(
Object a,
Object b) {
if ((a == null) &&
(b == null)
return true;
if ((a == null) &&
(b != null)
return false;
if ((a != null) &&
(b == null)
return false;
return a.equals(b);
}
我想知道是否有人已经在java/apache库中这样做了?是的,因为java SE 7有一个标准API:
是的,因为Java SE 7对此有一个标准API: 以下是我的答案:()
包tjacobs.util;
/**
*PrimaryKey的原因是使重写equals、hashCode和compareTo变得更简单和更容易
*实现以使它们在数据对象类中彼此一致。
*@作者汤姆·雅各布斯
*
*@param
*/
公共接口主密钥{
公共对象[]getPrimaryKey();
公共布尔等于(T obj);
公共int hashCode();
公共接口CompariablePrimaryKey扩展了Compariable,PrimaryKey{
@抑制警告(“未选中”)
公共可比[]getPrimaryKey();
}
公共静态类Impl{
@抑制警告(“未选中”)
公共静态最终布尔值equalsImpl(PrimaryKey键1,PrimaryKey键2){
对象[]数据1=key1.getPrimaryKey();
对象[]数据2=key2.getPrimaryKey();
//不要检查长度是否相等-让它作为异常抛出
试一试{
对于(int i=0;i以下是我的答案:()
包tjacobs.util;
/**
*PrimaryKey的原因是使重写equals、hashCode和compareTo变得更简单和更容易
*实现以使它们在数据对象类中彼此一致。
*@作者汤姆·雅各布斯
*
*@param
*/
公共接口主密钥{
公共对象[]getPrimaryKey();
公共布尔等于(T obj);
公共int hashCode();
公共接口CompariablePrimaryKey扩展了Compariable,PrimaryKey{
@抑制警告(“未选中”)
公共可比[]getPrimaryKey();
}
公共静态类Impl{
@抑制警告(“未选中”)
公共静态最终布尔值equalsImpl(PrimaryKey键1,PrimaryKey键2){
对象[]数据1=key1.getPrimaryKey();
对象[]数据2=key2.getPrimaryKey();
//不要检查长度是否相等-让它作为异常抛出
试一试{
对于(int i=0;i