JSR308

契約プログラミングか防衛プログラミングか - しんさんの出張所 はてなブログ編
にてJSR308の事が出てたので、復習(予習?w)がてらJSRのPDFとか漁ってみた(ちなみに英語得意じゃないです><)
 そういやJSR305とJSR308は別物だったんですねぇ、今まで気づかなかった・・・orz。JSR305が@NonNullとかの制約用アノテーションを定義するJSRで、JSR308がアノテーションの利用箇所拡大用JSRと。

 実は自分はJSR308に対して懐疑的な見方をしてました。「ちょっとやりすぎなんじゃなかろうか」と。
例えば

  Map<@NonNull String, @NonEmpty List<@Readonly Hoge>> map; 

という文は「KeyはStringを指定可能だがNullは許容せず、Valueには読み取りだけ許可するHogeオブジェクトだけadd可能でありsizeが1以上のListを指定可能なMap」という意味になるはずなのですが
(;´Д`)ノ<先生、ちょっと長すぎだと思います!
と思っていた時期が僕にもありました。たかが変数の宣言だけでどれだけ書くんだと(もちろん宣言部分以外でも書けるのですが)
 しかし、一連の"".equalsの話とかに絡めたりしても確かに有効な手段だなとも思えてきました(流されやすすぎだろ自分w)。実行時に@NonNullを指定した引数にNullが来たら勝手にExceptionとか出してくれるのかな??
 そもそもJSRの中の人達は自分なんかより遥かにデキル方達ですから自分が思ってる事に対してもちゃんと考えた上で策定してるはずですしねぇ(と信じたい)
 使い始めると馴れてきたりその有効性に惚れ込みそうではありますがw
 そういやJavaSE5.0にてGenericsが導入されるときも今回の自分みたく「なげーYO」と思った人はいたんでしょうかね、自分がこの業界に入った時期とJavaSE5.0が登場した時期はほとんど同じなので個人的に抵抗感とかは無かったですが、C++で同じような機能(Template)があるからそんな抵抗はなかったのかな。

 しかしJames Gosling氏の予想だとJavaSE7が出るのは1年から1年半後。遠いなぁ〜w

  • 追記

 そもそも必要なければ@NonNullとか書かなければいい話ですよね。「言語仕様が肥大化するから嫌だ」という感覚ではなく「選択肢が増えただけ」という感覚でいるほうが精神衛生上良さげな気がしてきました。