Java中比較兩個對象的指定屬性的值是否相等,可以使用Apache Commons Lang庫中的EqualsBuilder類。EqualsBuilder提供了一種便捷的方法來比較兩個對象的屬性值是否相等,具體步驟如下:
- 通過構(gòu)造器創(chuàng)建一個EqualsBuilder對象。
- 調(diào)用EqualsBuilder對象的append方法,傳入需要比較的兩個對象以及需要比較的屬性名稱。
- 最后調(diào)用EqualsBuilder對象的isEquals方法,如果返回true,則說明兩個對象的指定屬性的值相等,否則不相等。
import org.apache.commons.lang3.builder.EqualsBuilder;
public class Person {
private String name;
private int age;
// 省略構(gòu)造器和其他方法
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (obj == this) {
return true;
}
if (obj.getClass() != getClass()) {
return false;
}
Person rhs = (Person) obj;
return new EqualsBuilder()
.append(name, rhs.name)
.append(age, rhs.age)
.isEquals();
}
public boolean equals(Person obj, String... fields) {
if (obj == null) {
return false;
}
if (obj == this) {
return true;
}
if (obj.getClass() != getClass()) {
return false;
}
EqualsBuilder builder = new EqualsBuilder();
for (String field : fields) {
try {
Object thisValue = getClass().getDeclaredField(field).get(this);
Object objValue = obj.getClass().getDeclaredField(field).get(obj);
builder.append(thisValue, objValue);
} catch (IllegalAccessException | NoSuchFieldException e) {
e.printStackTrace();
return false;
}
}
return builder.isEquals();
}
}
在上述代碼中,我們在Person類中添加了一個帶有可變參數(shù)的equals方法??勺儏?shù)fields用于指定需要比較的屬性名稱,可以傳入多個屬性名稱。在方法內(nèi)部,我們使用反射獲取當前對象和另一個對象的指定屬性的值,并使用EqualsBuilder類來比較這些屬性的值是否相等。文章來源:http://www.zghlxwxcb.cn/news/detail-573572.html
使用這個方法,我們可以在比較Person對象時只比較指定的屬性,例如:文章來源地址http://www.zghlxwxcb.cn/news/detail-573572.html
Person p1 = new Person("Tom", 20);
Person p2 = new Person("Tom", 30);
boolean equalName = p1.equals(p2, "name"); // 返回true
boolean equalAge = p1.equals(p2, "age"); // 返回false
到了這里,關(guān)于[開發(fā)|java] java 比較兩個對象的指定屬性的值是否相等的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!