Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Apache Commonsに関するお話

Apache Commonsに関するお話

2013-07-27 渋谷Java #2
commons-langについてお話しました。

おや、日付が・・・。

5a1fb2220a9dada961aeda1d7492c4fb?s=128

mystelynx

July 27, 2013
Tweet

Transcript

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

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

  3. イントロダクション

  4. イントロダクション

  5. 分析力をコアとする マーケティングソリューションカンパニー •  Webアプリ〜バッチアプリまで •  Java / Groovy (Scala /

    Kotlin)系エンジニア •  猫好き
  6. イントロダクション

  7. Apache Commons?

  8. Apache Commons? — Javaのための便利なライブラリ集 — Jakarta commons? — http://www.jajakarta.org/commons — 「Jakarta Commonsの公式ホームペー ジは http://jakarta.apache.org/

    commonsです。」を信じて飛ぶと、 commons.apache.orgへジャンプするの で、きっと同じもの。
  9. — Commons Proper — 現役組 — 他のライブラリには極力依存しない! — 後方互換性の維持! — 43のサブプロジェクト!(2013/7/27調べ) — Commons Sandbox — 調整(実験)中の補欠組(17プロジェクト) — Commons

    Dormant — 戦力外(15プロジェクト)
  10. lang

  11. Lang Provides extra functionality for classes in java.lang.

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

  13. 使えるようにする <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.1</version>

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

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

  16. 使用例 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(); }
  17. Effective Java

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

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

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

    \/   /
  21. 期待していいの? ループ回数 (回) 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"); }
  22. スレッドセーフ? SimpleDateFormat FastDateFormat ・2スレッド ・1000回フォーマットループ NumberFormatException の嵐 問題なし

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

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

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

  26. lang3.exception.* — ContextedException — ContextedRuntimeException

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

  28. 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]
  29. まとめ

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

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