设为首页 加入收藏

TOP

Java的Comparable接口的一个陷阱
2014-11-24 12:53:54 来源: 作者: 【 】 浏览:0
Tags:Java Comparable 接口 一个 陷阱

Java的Comparable接口提供一个对实现了这个接口的对象列表进行排序的办法。原始的排序对于简单的对象来说具有意义,但是当我们面对复杂的面向对象的业务逻辑对象时,事情变得复杂的多。从业务经理的角度来看,一些交易对象的自然顺序可能是按照交易的价值来排序的,但是从系统管理员的角度来看,这个排序的规则可能是交易的速度。所以在大多数情况下,并没有明确的业务领域对象的自然排序规则。


假设我们找到了一个需要排序的类,比如说Campany。我们把公司的offical name作为主关键字,把id作为次要关键字。这个类的实现如下:


public class Company implements Comparable {

private final String id;
private final String officialName;

public Company(final String id, final String officialName) {
this.id = id;
this.officialName = officialName;
}

public String getId() {
return id;
}

public String getOfficialName() {
return officialName;
}

@Override
public int hashCode() {
HashCodeBuilder builder = new HashCodeBuilder(17, 29);
builder.append(this.getId());
builder.append(this.getOfficialName());
return builder.toHashCode();
}

@Override
public boolean equals(final Object obj) {
if (obj == this) {
return true;
}
if (!(obj instanceof Company)) {
return false;
}
Company other = (Company) obj;
EqualsBuilder builder = new EqualsBuilder();
builder.append(this.getId(), other.getId());
builder.append(this.getOfficialName(), other.getOfficialName());
return builder.isEquals();
}

@Override
public int compareTo(final Company obj) {
CompareToBuilder builder = new CompareToBuilder();
builder.append(this.getOfficialName(), obj.getOfficialName());
builder.append(this.getId(), obj.getId());
return builder.toComparison();
}
}


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇HTML5新增的元素详解 下一篇使用C#判断数据库服务器是否已经..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·C语言中如何将结构体 (2025-12-24 22:20:09)
·纯C语言结构体成员变 (2025-12-24 22:20:06)
·C语言中,指针函数和 (2025-12-24 22:20:03)
·哈希表 - 菜鸟教程 (2025-12-24 20:18:55)
·MySQL存储引擎InnoDB (2025-12-24 20:18:53)