日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

你应该更新的Java知识之常用程序库

發布時間:2025/3/21 java 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 你应该更新的Java知识之常用程序库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

些庫有的解決了平時常見又重要的問題,有的則讓Coding變得更愜意,值得全速跟進了解!

原文

在很多人眼中,Java已經是一門垂垂老矣的語言,但并不妨礙Java世界依然在前進。如果你曾離開Java,云游于其它世界,或是每日只在遺留代碼中掙扎,或許是時候抬起頭,看看老Java中的新東西。

Guava

一句話,只要你做Java項目,就應該用Guava。

guava是Google出品的一套Java核心庫,在我看來,它甚至應該是JDK的一部分。作為一個Java程序員,如果你沒抱怨過JDK的設計,只能說明一點,你寫得程序還是太少。正是JDK設計不彰,才有了一些項目來補充JDK的不足。如果說老Java程序員應該聽說過Apache Commons Lang,那新Java程序員該知道的就是Guava了。

老Java程序員更多的是知道Google Collections,不妨到它的主頁上走一遭,你會看到這個庫已經改名為Guava。事實上,Guava并不直接等于Google Collections,Guava是一個超集。Guava實在太強大了,要想展現它的強大,需要專門的介紹,這里就不展開了。

下面以一個統計單詞出現個數的小程序作為這個段落的結尾,雖然無法與許多其它語言的實現相提并論,但作為一個Java程序員,你不妨想一下按照傳統方式,這段代碼應該是什么樣子。

String content = Files.toString(new File(args[0]), Charset.defaultCharset()); Iterable texts = Splitter.on(CharMatcher.WHITESPACE).omitEmptyStrings().trimResults().split(content); Multiset collection = HashMultiset.create(texts);

Joda Time

你覺得一個API設計得差到什么份上,才會把自己差不多的API全部Deprecated掉。java.util.Date便是這樣的奇葩。因為它的API幾乎都是反直覺的,幾乎所有敢于用它的Java程序員都吃過它的虧。想初始化個2013年的第一天,還真不那么容易:

Date firstDayOf2013 = new Date(113, 0, 1);

如果你是個Java新手,你能猜出113是從哪來的嗎?(好吧,它是2013-1900,至于為什么是1900,這真得問API的設計者了)。

Joda Time就是人們實在無法忍受這樣東西的產物。同樣的代碼用Joda Time實現:

DateTime firstDayOf2013 = new DateTime().withDate(2013, 1, 1);

無論如何,你知道這能看出這些參數的含義了。不只如此,你還可以計算兩天后是什么日子:

firstDate.plusDays(2);

日期格式化,也是JDK Date系列API里一大特色,你必須把代碼寫成下面這樣:

new SimpleDateFormat("yyyy.MM.dd").format(firstDayOf2013)

作為一個初始化很慢的構造函數,你還必須每次調用,因為它不是線程安全的。同樣的代碼,在Joda Time里,我們可以用DateTimeFormatter:

DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy.MM.dd"); ... formatter.print(dateTime);

請盡管放心大膽把formatter聲明成一個字段,因為它是線程安全的。

當然,Joda Time的強大遠不止于此。當然,JDK也并不是那么完全的自暴自棄,于是,有了一個JSR 310專門設計新的Date API。JSR 310的spec lead是Steven Colebourne,此人正是Joda Time的作者。不過,雖然JSR 310為我們描繪了Date的全新景象,但Java 8出來之前就先別打它的主意了,乖乖地用Joda Time吧。

Hamcrest

一句話,如果你寫單元測試,就應該用Hamcrest。

如今不寫單元測試,你都不好意思說自己在做工程項目了。但你一般這么寫斷言呢?如果你還寫成下面這樣,我只能說你落伍了:

assertEquals(a, b);

請告訴我,哪個是執行結果,哪個是預期結果,不管你是怎樣,反正大多數情況下,我是記不住的。所以,這個在只重功能不重可讀性年代產生的API該更新了。于是,Hamcrest就是為了解決這樣的問題而生的。

assertThat(a, is(b));

很明顯,前面一個是執行結果,后面一個是預期結果,當然這只是一個簡單的例子。由于Hamcrest引入了matcher的概念(就是你看到的is部分),我們可以進行更多的組合:

assertThat(number, greaterThan(5)); assertThat(text, startsWith("Hello")); assertThat(array, hasItem("World"));

Hamcrest如此好用,以至于JUnit已經將其吸納進去。如果你現在用的JUnit是4.4之后的版本,那你已經有了Hamcrest。無需額外的配置,就可以拿過來用。

Mockito

寫單元測試不用Mock框架幾乎是一件不可能的事,我是說Mock框架,不是Mock模式哦!對于老Java程序員來說,提起Mock框架,率先在腦海中撞線的多半是JMock或EasyMock。

使用Mockito,只要有一個理由就夠了,簡單。相比于JMock,它不用寫checking,相比于EasyMock,它省去了replay。下面是個例子:

List mockedList = mock(List.class); when(mockedList.get(0)).thenReturn("first"); System.out.println(mockedList.get(0));

當然,Mockito還是非常強大的。

最后再強調一遍,無論使用哪個框架,請盡量不要使用verify,也就是傳說中的Mock模式,那是把代碼拉入泥潭的開始。

SLF4J和Logback

日志幾乎是稍微有點規模的項目躲不開的一個東西,如果你是個老Java程序員,你必然知道Log4J,多半也知道Commons Logging。是時候把它們扔掉了,因為有SLF4J和Logback了。SLF4J要替代Commons Logging,而Logback的目標是Log4J。

程序員里憤青多,SLF4J和Logback的作者就是一個,他叫Ceki Gülcü,事實上,他也是Log4J的作者。Log4J的開發狀態實在讓他太不爽了,于是,他另起爐灶,打造出新的替代品。

只憑一點就足以讓我們對SLF4J義無反顧了,你還記得用Commons Logging寫出這樣的代碼嗎?

if (logger.debugEnable()) {logger.debug("Hello, ", name); }

而SLF4J的寫法只有一句話:

logger.debug("Hello, {}", name);

從根源來說,這是時代造成的,Commons Logging是Java 5之前產生的,那時候還沒有變參,所以,我們不得不說,它老了。

至于Logback,性能是最重要的噱頭,當然,還有一些其它的理由。理由里有一點并未提及,但對于開發人員很貼心的改進,就是日志模式的改進,還記得Log4J那密碼一樣的日志模式嗎?

%d{dd MMM yyyy HH:mm:ss} [%t] %-5p %m%n

下面是Logback的版本,不用查文檔,我也看出每段表示的都是什么:

%d{dd MMM yyyy HH:mm:ss} [%thread] %-5level %msg%n

這里介紹的幾個程序庫都是很通用的,無論是你做怎樣的開發,應該都或多或少給你一些幫助。時間未曾停步,Java開發也未曾停留,如果你是個老Java程序員,是時候更新一下自己的知識了。

原文鏈接

  • 你應該更新的Java知識之常用程序庫(一)
  • 你應該更新的Java知識之常用程序庫(二)

from:?http://oldratlee.com/post/2013-02-02/new-popular-java-libraries

總結

以上是生活随笔為你收集整理的你应该更新的Java知识之常用程序库的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。