使用第三方工具覆写Object中方法

本文介绍如何使用Google的Guava包来简化Java中Object类的equals、hashCode和toString方法的覆写过程,提高代码效率并减少重复工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们在实际开发中,经常需要覆写Object中的equals,hashcode,toString方法,其实编写这些代码并不是很难,但很枯燥和乏味。

下面推荐Google的Guava jar包来覆写上面的方法。

直接上代码。

import com.google.common.base.MoreObjects;
import com.google.common.base.Objects;
import com.google.common.collect.ComparisonChain;

public class Book implements Comparable<Book> {

    private String author;
    private String title;
    private String publisher;
    private String isbn;
    private double price;

    public Book(String author, String title, String publisher, String isbn, double price) {
        this.author = author;
        this.title = title;
        this.publisher = publisher;
        this.isbn = isbn;
        this.price = price;
    }

    public String getAuthor() {
        return author;
    }

    public String getTitle() {
        return title;
    }

    public String getPublisher() {
        return publisher;
    }

    public String getIsbn() {
        return isbn;
    }


    public double getPrice() {
        return price;
    }

    @Override
    public String toString() {
        return MoreObjects.toStringHelper(this)
                .omitNullValues()
                .add("title", title)
                .add("author", author)
                .add("publisher", publisher)
                .add("price",price)
                .add("isbn", isbn).toString();
    }

    @Override
    public int hashCode() {
        return Objects.hashCode(title, author, publisher, isbn, price);
    }

    @Override
    public boolean equals(Object obj) {
        return Objects.equal(this, obj);
    }

    @Override
    public int compareTo(Book o) {
        return ComparisonChain.start()
                .compare(this.title, o.getTitle())
                .compare(this.author, o.getAuthor())
                .compare(this.publisher, o.getPublisher())
                .compare(this.isbn, o.getIsbn())
                .compare(this.price, o.getPrice())
                .result();
    }


还可以使用apache 的common包里的类来实现。例如下面代码。

package com.lee.bsc.bean;

import java.io.Serializable;

import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.commons.lang3.builder.ToStringBuilder;

import com.lee.util.StringUtil;

public class UserBean implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 3761328140585117680L;

    private String userId;

    private boolean login;

    public UserBean() {

    }

    public UserBean(String userId) {
        this.userId = userId;
    }

    public String getUserId() {
        return userId;
    }

    public boolean isLogin() {
        return login;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

    public void setLogin(boolean login) {
        this.login = login;
    }

    @Override
    public int hashCode() {
        return new HashCodeBuilder().append(userId).toHashCode();
    }

    @Override
    public boolean equals(Object other) {
        if (!(other instanceof UserBean)) {
            return false;
        }

        UserBean castOther = new UserBean();
        return new EqualsBuilder().append(this.getUserId(), castOther.getUserId()).isEquals();
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this, StringUtil.getToStringStyle())
                        .append("userId", userId)
                        .append("login", login).toString();
    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值