認真寫文章,用心作分享。java
我的網站:yasinshaw.com工具
公衆號:xy的技術圈單元測試
前幾天在使用Arrays.asList方法的時候遇到一個問題:測試
與是去看了一下這個方法的源碼,發現是返回的ArrayList呀,怎麼會不支持remove操做呢?網站
後來仔細看了源碼才發現,這個ArrayList
並非咱們日常使用的java.util
包下的ArrayList,而是Arrays類裏面一個私有的內部類。這個內部類繼承了AbstractList
,但沒有複寫remove或者add等方法。因此它的長度不可變,這也與Arrays這個類的設計目的是契合的。設計
之因此用Arrays.asList()方法,是爲了可以用盡可能簡潔的代碼獲得一個List。這在寫單元測試的時候是很常見的需求。code
在Java 9之後,可使用List.of()
方法來代替Arrays.asList()方法。但其內部也是返回的一個不可變的List:cdn
但這裏須要注意的是,二者仍是有一些小區別的。好比,Arrays.asList()方法返回的List是能夠進行set
操做的,但List.of()的不能夠。blog
若是想要用這種簡潔性,又但願可以在後續添加或者刪除元素,應該怎麼辦呢?能夠本身寫一個方法,相似於這樣:繼承
這種事情,固然已經有開源的庫幫咱們作啦!Google Guava提供了一個Lists類,裏面有一些newArrayList方法:
Google Guava庫提供了許多比較有用的工具類,能夠嘗試瞭解使用一下。
更多文章,歡迎關注公衆號:xy的技術圈