前半の方についてコメントしてみます。
動作には影響は与えないが、このメソッドやフィールドはこういう物ですよ、という情報を付与する
アノテーション自体は確かにクラスやメンバー(フィールドやメソッド)や引数などに、「Javaの言語仕様でサポートされていないような意味付け(メタな情報)のマーク」を付けるためのものですが、コンパイル時にアノテーションプロセッサーを使って、あるいは実行時にリフレクションを使ってそのマークを検出して色々なことが行えるような仕組みが備わっているため、そのようなプログラムを併用すると「動作に影響を与えることもできる」ものです。
そうしたものを何も使わなければおっしゃるとおり「ただのマーク」にしかすぎません。
アノテーションプロセッサーを活用している例ではLombokが思い浮かびます。これはgetter/setterの自動生成をしてくれたりしますが、マクロ展開っぽいこともできるという一例だと思います。言語仕様の拡張とまではいかなくても糖衣構文的なものは実現できたりするのではないでしょうか。
とはいえ、Lombokのようにアノテーションプロセッサーを使うような応用は言語処理系の専門家っぽい人がやることでアプリケーション開発者のだれでもがほいほいやるようなものではない印象です。
一方、リフレクションを用いて実行時にアノテーションをチェックし何か特別な動作をする程度であればわりと簡単にできる印象です。リフレクションを利用するため多少ミドルウェアっぽい設計をすることになりますが。
そもそもアノテーションはどのような場合に実装されるものなのでしょうか?またアノテーションで実装した方がいい場合などもあるのでしょうか?
自分はDIとかAOPという単語が思い浮かぶ程度で、コメントできるほどの知識がないです。開発に対する取り組み方もプロの方と大分違う気がしますし。
自分の場合「ちょっとこういうメタな情報を付けておこう」なんて感じで割と気軽にアノテーションを定義しますが、プロの方から見れば「自前でミドルウェアっぽいことをほいほいやってしまうなんて安直すぎる、このフレームワーク使えば済むではないか」と言われてしまう気がします...><
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/04 10:00
2018/05/07 10:28 編集
2018/05/06 02:17