Guava 简介

Guava 简介

八月 12, 2017 阅读 989 字数 1785 评论 0 喜欢 0

Simply Introduction

簡單介紹一下 Guava,比如常見的 Java 類庫推薦文章。

Guava 是谷歌公司將其對於 Java 開發中所需要的常見工具整理在一起的工具庫,是對 Java 基礎類庫的補充。
包含 collections, caching, primitives support, concurrency libraries, common annotations, string processing, I/O

Compare with other package

和它類似的包,還有 Commons 的包,但是 Commons 的包主要關注的是好用,卻不關注方法是否冗餘,設計是否精簡。所以 Commons 的包有一點過於浪費,在原則上我們如果使用 Guava,就要盡量避免 Commons 類的包的使用。

如: commons-lang(3) 裡面經常能看到的 StringUtils.isBlank(str) isEmpty(str) 之類的。Guava 雖然沒有一個方法能表示,但是可以組合判斷出來 "".equals(Strings.nullToEmpty(str).trim())

但是 Commons 也有一些 Guava 所沒有的特性,比如 Tuples(元組)。

  1. Tuples 是什麼?類比函數式裡面的改變
  2. Commons 裡面最常見的元組概念,Pair
  3. 為何有時需要元組,就是多值返回的時候的匿名計算對象,介紹函數式相關內容。
  4. 為何 Guava 沒有元組? 避免誤解,避免被濫用

The reason why should us learn Guava

一般來說我們介紹 XXX 的時候,習慣說,你就去閱讀源碼就好。

  1. 首先 Guava 的源碼不小,最新的 22 jar 包已經 2M 多了。
  2. 其次,Guava 涉及的東西太多,對於新手,我們推薦優先掌握常見的幾大工具類,快速上手學習。
  3. 為了便於新人閱讀使用 Guava,我們需要梳理一下 Guava 的一些代碼風格。
  4. Guava 的代碼基本包含了我們常見的輪子,且足夠高效優秀,通過學習,加深我們對 Java 基礎知識的了解。
  5. 學習優秀的代碼,學習它的編寫套路。

The (code style)/(design smile) of Guava

  1. Fluent API——其特點的描述
    • 好處:可定制,可組合,以 Joiner 為例。
  2. 不可變
    • 為何要不可變?類比 NotifyService 裡面的斐波那契數列定義。
    • 不可變的好處?線程安全之類的,類比 Retrofit 2 中的對象。協議實體傳參一定要不可變,為何?
  3. 大多都為線程安全
    • 什麼是線程安全? 一句話總結
    • Java 的內存同步特點?
    • Guava 如何實現線程安全?
  4. 已經被 Javaer 廣泛接受的編程習慣:fail fast、reject nulls等,這些在 Base 包內能直觀體會到。

The common module of Guava

  1. Basic utilities: Make using the Java language more pleasant.
    • Using and avoiding null
    • Preconditions
    • Common object methods
    • Ordering
    • Throwables
  2. Collections: Guava's extensions to the JDK collections ecosystem.
  3. Graphs: a library for modeling graph-structured data
  4. Caches: Local caching, done right, and supporting a wide variety of expiration behaviors.
  5. Functional idioms: Used sparingly, Guava's functional idioms can significantly simplify code.
  6. Concurrency: Powerful, simple abstractions to make it easier to write correct concurrent code.
  7. Strings: A few extremely useful string utilities: splitting, joining, padding, and more.
  8. Primitives: operations on primitive types, like int and char
  9. Ranges: ranges on Comparable types
  10. I/O
  11. Hashing
  12. EventBus
  13. Math
  14. Reflection

发表评论

电子邮件地址不会被公开。 必填项已用*标注