skillup

技術ブログ

Java

Annnotationについて その2

投稿日:2015年9月27日 更新日:

Java(JavaEE)をやりだして半年ぐらいたつんですが、個人的に鬼門だとおもっていたのが下記内容です。

  1. MVCではないコンポーネントの考え方
  2. クラスを使ったジェネリクスの使い方(型パラメータなど)
  3. リフレクション
  4. スコープアノテーション
  5. アノテーション

あとは単純にglassfishが遅いことですかね(汗)これは解決できそうにありませんが・・

ようやく少しずつ慣れてきたんですが5がいまだにわかっておらず、頭にもやもやとしたものがたまっていました。

以前にも一応記事は書いていたんですけどね・・・ようわかってなかったんで(汗)

Annotationについて

今回、アノテーションを何とか使うことができ、少し理解がすすんだのでメモしておきます。

アノテーションとは

定義はいまだによくわかっていません(汗)

メソッドやフィールドにコメント的につけることで属性を付加させる仕組みかな?

こんな説明を読んでも全く分からないですね(汗)

私もいままでたくさんの説明をいろいろと呼んだんですが、ようわかりませんでした。

おそらくサンプルや実際のソースを大量にみて覚えるのが一番だと思います。

わかりやすい具体例としてはオーバーライドするメソッドには@Overrideなど書くことが一般的です。

あとは非推奨のメソッドのところに@Deprecatedなど書いたりとか。

すでにJavaに標準で用意されているアノテーションはいっぱいあるのですが、独自にアノテーションをつくることもできます。

作るケースとしては画面からの入力のエラーチェックが一番わかりやすいですかね。

name,age,emailみたいなフィールドがあって必須やエラーチェックを行いたい場合、@NotNullとか作って設定しておけばnullだった場合にエラーメッセージを吐く、こんなことができます。

上記のものはBeanValidationとしてすでにありますが・・・

今回私がやろうとしたのは

  1. CSVをMapでとりこむ(1行目が日本語のヘッダ、それ以降がデータ)
  2. Mapをクラスに格納する

っていう単純な処理なんです。

具体例を挙げますと、

CSVで

番号 名前 年齢
1     松本   35

とか書いてあるやつをMapにそのまま

“番号”=>”1”
“名前”=>”松本”
“年齢”=>35

と保存しておき、これを

public class  Person{
private String id;
private String name;
private String age;

みたいなクラスに格納するってことです。

このMapからクラスへの変換の際にアノテーションを使ってみました。普通にヘッダーで変数名のList渡せば一発なんですけどね・・・まあ勉強もかねて。

要は日本語と変数名(英名)の対応ですね。あと必須項目フラグもいれたかったので。

ソース

ソースは主に3か所です。

  • アノテーション自体の定義
  • アノテーションを付加させる
  • アノテーションで実際に処理を行う

です。

まずアノテーション自体の定義を下記のように行います。

アノテーションを付加

Mapから変換させたいクラスに下記の用につけます。

実際にMapからクラスにデータをコンバートする部分です。csvMapというのが<String,String>型のMapでここにすでにデータが入っているものとします。

現物はもっと複雑なデータで、ブログアップの際に手直ししているんで動かなかったらすいません(笑)

ポイントとしては

  • フィールドを取り出す
  • そのフィールドに付加されているアノテーションをキャスト
  • プロパティの取り出し

になります。

今回は非常に簡単な例でしたが、活用するともっといろいろところで使えそうですね。

参考リンク

http://java-code.jp/160

アノテーションを使用してAOPをする

Javaのリフレクションとアノテーションについて

アノテーション作成方法

-Java

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

CIことはじめ

業務でJavaのテキスト変換ツールを作成。 プログラムよりもCIツールを使って他人の環境下で正常に稼動させるためにどうするかの調査に時間かかりましたね。 今回やりたかったことは下記の通りです。いわゆる …

no image

glassfishとDB接続 ~CUI操作~

JavaEEではDBを使うときにglassfish内で設定が必要です。 基本的にはGlassFishでDB接続などのようにブラウザで管理画面から情報を入力することが可能です。 ただCUIや設定ファイル …

no image

配列の初期化&代入+Mapから別Map作成

最近、業務ではコードの量が肥大化し、とにかく短く書くことを心がけてます。 まあ、短ければいいってもんでもないんですが・・・ Listにクラスを使いするときに↓みたいな書き方を紹介したんですが、 [cr …

no image

arquillianでのリソースファイル読み込み

以前、このエントリーでarquillianからライブラリが利用できず、追加のライブラリを導入した、ということを書きました。 実はリソースファイルもそのままですとarquillianからは使用できません …

no image

ApacheCommonsのライブラリ

先日のエントリーでBeanUtilsが非常に使えるという話をしたのですが、それ以外にもApacheCommonsのライブラリには使えるものがかなりあります。 かなりあります、というかなぜ今まで使ってな …