Slide 1

Slide 1 text

Apache Commons 2013-07-28 #渋谷Java #2 Tomohiro Urakawa (@mystelynx)

Slide 2

Slide 2 text

Agenda — イントロダクション — Apache Commons? — lang — まとめ

Slide 3

Slide 3 text

イントロダクション

Slide 4

Slide 4 text

イントロダクション

Slide 5

Slide 5 text

分析力をコアとする マーケティングソリューションカンパニー •  Webアプリ〜バッチアプリまで •  Java / Groovy (Scala / Kotlin)系エンジニア •  猫好き

Slide 6

Slide 6 text

イントロダクション

Slide 7

Slide 7 text

Apache Commons?

Slide 8

Slide 8 text

Apache Commons? — Javaのための便利なライブラリ集 — Jakarta commons? — http://www.jajakarta.org/commons — 「Jakarta Commonsの公式ホームペー ジは http://jakarta.apache.org/ commonsです。」を信じて飛ぶと、 commons.apache.orgへジャンプするの で、きっと同じもの。

Slide 9

Slide 9 text

— Commons Proper — 現役組 — 他のライブラリには極力依存しない! — 後方互換性の維持! — 43のサブプロジェクト!(2013/7/27調べ) — Commons Sandbox — 調整(実験)中の補欠組(17プロジェクト) — Commons Dormant — 戦力外(15プロジェクト)

Slide 10

Slide 10 text

lang

Slide 11

Slide 11 text

Lang Provides extra functionality for classes in java.lang.

Slide 12

Slide 12 text

commons-lang3 ちなみに、2002/02/06 J2SE 1.4 デビュー

Slide 13

Slide 13 text

使えるようにする org.apache.commons commons-lang3 3.1

Slide 14

Slide 14 text

便利そうなやつら — builder — time — exception

Slide 15

Slide 15 text

lang3.builder.* — CompareToBuilder — EqualsBuilder — HashCodeBuilder — ReflectionToStringBuilder — ToStringBuilder

Slide 16

Slide 16 text

使用例 public int hashCode() { // you pick a hard-coded, //randomly chosen, non-zero, odd number // ideally different for each class return new HashCodeBuilder(17, 37). append(name). append(age). append(smoker). toHashCode(); }

Slide 17

Slide 17 text

Effective Java

Slide 18

Slide 18 text

便利そうなやつら — builder — time — exception

Slide 19

Slide 19 text

lang3.time.* — FastDateFormat — FastDateParser — FastDatePrinter

Slide 20

Slide 20 text

きたか…!!   ( ゚д゚) ガタッ   /   ヾ __L| / ̄ ̄ ̄/_   \/   /

Slide 21

Slide 21 text

期待していいの? ループ回数 (回) FastDateFormat (ms) SimpleDateFormat (ms) 100,000 588 590 1,000,000 2476 2589 SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") FastDateFormat f = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss") for (int i = 0; i < 100000; i++) { f.parse("2013-07-28 15:00:30"); //s.parse("2013-07-28 15:00:30"); }

Slide 22

Slide 22 text

スレッドセーフ? SimpleDateFormat FastDateFormat ・2スレッド ・1000回フォーマットループ NumberFormatException の嵐 問題なし

Slide 23

Slide 23 text

実は・・・ — FastDateFormatは、ver3.1の時点で は「Dateを書式にそってformatし文字 列にする」機能し提供していない! — そして、Mavenのリポジトリに3.2は提 供されていない(と思う)。使いたかった ら自分でビルドする必要あり。

Slide 24

Slide 24 text

Joda-Time 使え。 http://joda-time.sourceforge.net

Slide 25

Slide 25 text

便利そうなやつら — builder — time — exception

Slide 26

Slide 26 text

lang3.exception.* — ContextedException — ContextedRuntimeException

Slide 27

Slide 27 text

独自例外作るのはいいけど — スタックトレースと一緒に、どう いう情報出せばいいんだっけ? — 考えるのが面倒

Slide 28

Slide 28 text

try { ... } catch (Exception e) { throw new ContextedRuntimeException("Error posting account transaction", e) .addContextValue("Account Number", accountNumber) .addContextValue("Amount Posted", amountPosted) .addContextValue("Previous Balance", previousBalance) } org.apache.commons.lang3.exception.ContextedRuntimeException: java.lang.Exception: Error posting account transaction Exception Context: [1:Account Number=null] [2:Amount Posted=100.00] [3:Previous Balance=-2.17] [4:Transaction Id=94ef1d15-d443-46c4-822b-637f26244899]

Slide 29

Slide 29 text

まとめ

Slide 30

Slide 30 text

まとめ — commonsは、依存性も少ないし後方互換 性も確保されているので、安心して使える。 — StringBuffer全盛。※一部StringBuilder へ変わったりもしてる。 — 日付・時間関係はJoda-Time一択。 — toString()や例外時の文字列出力に悩むく らいならビルダーやコンテキスト付き例外 使って楽しよう。

Slide 31

Slide 31 text

ご静聴ありがとうございました!