【发布时间】:2015-07-03 07:11:44
【问题描述】:
我已经在 class 上实现了 Comaprable ,它给我的比较方法违反了它的一般合同! , 由于有些值返回为 null , 代码如下
公共静态比较器名称比较器 = 新的比较器() {
public int compare(JSONReceiptList rName1, JSONReceiptList rName2) {
if(rName1.retailer!=null || rName2.retailer!=null) {
if(rName1.retailer==null||rName2.retailer==null) {
return 0;
}
else
{
if(rName1.retailer.retailerName==null ||rName2.retailer.retailerName==null ) {
return 0;
}
else
{String Name1 = rName1.retailer.getRetailerName().toUpperCase();
String Name2 = rName2.retailer.getRetailerName().toUpperCase();
return Name1.compareTo(Name2);
}
}
//ascending order
}
else
{
return 0;
}
}
};
【问题讨论】:
-
是的,您的比较违反了合同。如果你有
x、y和z这样x < z(没有null)但y有空值,所以compare(x, y)是0,compare(y, z)是0。从根本上说,你需要重新考虑值为空时的结果。