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

Apache Commonsに関するお話

Apache Commonsに関するお話

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

おや、日付が・・・。

mystelynx

July 27, 2013
Tweet

More Decks by mystelynx

Other Decks in Programming

Transcript

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

    View Slide

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

    View Slide

  3. イントロダクション

    View Slide

  4. イントロダクション

    View Slide

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

    View Slide

  6. イントロダクション

    View Slide

  7. Apache Commons?

    View Slide

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

    View Slide

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

    View Slide

  10. lang

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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();
    }

    View Slide

  17. Effective Java

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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");
    }

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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]

    View Slide

  29. まとめ

    View Slide

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

    View Slide

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

    View Slide