平臺之所以謂之平臺,以其能建立一個生態,並與之外圍達成共贏。霸道點的平臺也會反噬外圍生態,像微軟集成瀏覽器,媒體播放器。還有即將的 iOS 12 要把應用商店多是收費的 AR 皮尺放到它自己系統中來,走別人的路,讓別人無路可走。從此衆泰皮尺部的唯一的生產工具就會是人手一部能安裝 iOS 12 iPhone 了。
JDK 也不例外,Java 8 之前日期庫的話 Joda-Time 是首要之選,Java 8 集成後應該是鮮有人問津。以往說到集合操作庫,有兩個選擇,其一爲 Apache Commons Collections,二爲 Google 的 Guava,當然前者與後者競爭中也早已敗下陣來,況且前者還受到 Java 8 的夾擊。而本文要說的可以說是 Java 9 把 Guava 中創建不可變集合的方式據爲已用了,直截了當的說,凡是 Java 9 後有創建不可變集合的需求,只要用三大接口 List
, Set
,Map
中的 of(...)
方法就對了。
Java 9 之前,當我們需要集合相關的操作,兩個選擇:
- Apache Commons Collections 的幾個類 ListUtils, SetUtils, MapUtils, 和 CollectionsUtils。比如它們提供的以下幾些個工具方法
ListUtils.unmodifiableList<List<? extends E> list) //創建不可變 List
SetUtils.emptySet() //不可變的空 Set
SetUtils.unmodifiableSet(Set<? extends E> set) //創建不可變 Set
MapUtils.unmodifiableMap(Map<? extends K, ? extends V> map) //創建不可變 Map
CollectionUtils.unmodifiableCollection(Collection<? extends C> collection) //創建不可變集合 - Guava 的幾個類 ImmutableList, ImmutableSet, 和 ImmutableMap。而它們創建不可變集合的方式就是通過各自的
of(...)
方法,以ImmutableList
爲例(其餘兩個類也類似),它有of(): ImmutableList<E>
of(E element): ImmutableList<E>
of(E e1, E e2): ImmutableList<E>
of(E e1, E e2, E e3): ImmutableList<E>
......
of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9, E e10, E e11, E e12, E... others): ImmutableList<E>