skillup

技術ブログ

Java

Annnotationについて その2

投稿日:

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

http://qiita.com/xaatw0/items/5876afa418d4b6467e4e

http://d.hatena.ne.jp/Kishi/20080123/1201090442

http://www.ne.jp/asahi/hishidama/home/tech/java/annotation.html

-Java

執筆者:


comment

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

関連記事

no image

try-with-resourceの使い方

先日ファイル入出力の処理をいろいろと書いていたところ、例外処理について社長からアドバイスをいただきました。 Contents1 ファイルの入出力について2 try-with-resource3 参考リ …

no image

Javadocに関して

業務で社内で使うクラスライブラリを作成中です。 他人に使ってもらうものなのでコメントやドキュメント周りの整備が必要になり、javadocをしっかり作りたいと思っています。 Contents1 java …

no image

JPAまとめ

JPAわけわかんねーと思い、触りはじめてから3か月ぐらいたちます。 いまだに細かい部分はよくわかっていないことは多いのですが、全体像というか何となくどういうものかはわかり始めてきたいのでまとめたいと思 …

no image

jenkinsのオートデプロイ

久々にJavaやりました。 Contents1 やりたいこと2 ハマりポイント2.1 Antでのjobの設定2.2 jenkinsでビルドできない2.3 jenkinsのオートデプロイ2.4 SSHで …

no image

ガベージコレクタに関して

本日はガベージコレクタに関して。 Contents1 ガベージコレクタとは?1.1 1 nullを代入1.2 2 参照変数を他のオブジェクトに割り当てる1.3 finalize()メソッドの定義 ガベ …