Google Guava学习笔记——基础工具类针对Object类的使用

  Guava 提供了一系列针对Object操作的方法。

  1. toString方法

  为了方便调试重写toString()方法是很有必要的,但写起来比较无聊,不管如何,Objects类提供了toStringHelper方法,它用起来非常简单,我们可以看下面的代码:

  

复制代码
public class Book implements Comparable<Book> {

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

    /*
     *  getter and setter methods
     */
 public String toString() {
      return Objects.toStringHelper(this)
              .omitNullValues()
              .add("title", title)
              .add("author", author)
              .add("publisher", publisher)
              .add("price",price) 
              .add("isbn", isbn).toString();
  }
 
}
复制代码

  注意,在新的版本中,使用MoreObjects类的toStringHelper替代原来的方法,原来的方法deprecated了。

   2,检查是否为空值

    firstNonNull方法有两个参数,如果第一个参数不为空,则返回;如果为空,返回第二个参数。

    String value = Objects.firstNonNull("hello", "default value");

    注意,此方法也已经废弃了,可以使用 String value = MoreObjects.firstNonNull("hello", "default value"); 来代替。

  3,生成 hash code

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

  4,实现CompareTo方法

   我们以前的写法是这样的: 

复制代码
public int compareTo(Book o) {
        int result = this.title.compareTo(o.getTitle());
        if (result != 0) {
            return result;
        }

        result = this.author.compareTo(o.getAuthor());
        if (result != 0) {
            return result;
        }
        
        result = this.publisher.compareTo(o.getPublisher());
        if(result !=0 ) {
            return result;
        }
        
        return this.isbn.compareTo(o.getIsbn());
    }
复制代码

  改进后的方法:

复制代码
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();
    }
复制代码

 

  

posted @   林本托  阅读(1219)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示