服务器

位置:IT落伍者 >> 服务器 >> 浏览文章

Apache Commons Lang之hashCode()、equals()


发布日期:2018年10月26日
 
Apache Commons Lang之hashCode()、equals()

Apache Commons Lang提供一套生成hashCode()equals()和compareTo()的API简单易用这个与toString()工具用法类似

实现策略

hashCode()

通过HashCodeBuilder反射来生成这说明类的hashCode与类中所有的域都相关

也可以通过HashCodeBuilder实例来制定生成

equals()

也有两种生成方式与toString()hashCode()的生成策略类似

compareTo()

与以上都类似

实例

为了测试创佳两个类 FooBar参看上篇文章分别通过两种方式实现其hashCode()和equals()方法

public class Foo {

private String name;

private int age;

private Bar bar;

public Foo(String name int age) {

thisname = name;

thisage = age;

}

//省略getter/setter方法

}

public class Bar {

private String name;

public Bar(String name) {

thisname = name;

}

//省略getter/setter方法

}

实现hashCode()

反射方式

@Override

public int hashCode() {

return HashCodeBuilderreflectionHashCode(this);

}

制定方式

@Override

public int hashCode() {

return new HashCodeBuilder( )

append(name)

append(age)

append(bar)

toHashCode();

}

实现equals()

反射方式

@Override

public boolean equals(Object obj) {

return EqualsBuilderreflectionEquals(this obj);

}

制定方式

@Override

public boolean equals(Object obj) {

boolean flag = false;

if (obj != null && FooclassisAssignableFrom(objgetClass())) {

Foo f = (Foo) obj;

flag = new EqualsBuilder()

append(name fgetName())

append(age fgetAge())

append(bar fgetBar())isEquals();

}

return flag;

}

生成compareTo()

当然实现compareTo()的前提是Foo类实现了Comparable接口否则没啥意义

反射实现

public int compareTo(Object obj) {

return CompareToBuilderreflectionCompare(this obj);

}

制定实现

public int compareTo(Object obj) {

int flag = ;

if (obj != null && FooclassisAssignableFrom(objgetClass())) {

Foo f = (Foo) obj;

flag = new CompareToBuilder()

append(name getName())

append(age fgetAge())

append(bar fgetBar())

toComparison();

}

return flag;

}

EqualsBuilder不光可以比较对象还可以通过其对象来比较各种类型的数据包括数组

上一篇:学会一种简单的和FTP交互的方法

下一篇:Java从服务器上获取时间动态显示在jsp页面实现思路