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

JPAまとめ

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

no image

型情報の取得・活用について

Javaで抽象度の高い実装を行うときに必要となる型情報の活用法について。 できるとできないとでプログラムの応用範囲が変わってくるのでメモっときます。 こちらのエントリーと合わせて読むといいと思います。 …

no image

GlassFish&Junitの不具合

JavaEE(JSF+JavaBean+EJB+JTA)でアプリを製作しているのですが、EJBの部分のjunitができないことが判明しました。 正確に言うとラムダ式を使うと不具合がでます。原因としては …

no image

JavaSEでのCDI

以前、JavaSEでもCDIを使ってみたい!と思ったのですが、以前は探し方が悪かったのか情報を見つけ出すことができませんでした。 が、昨日ちょっと検索したらちょっと情報があり、無事実装できたのでメモし …

no image

JavaEEでリダイレクトを伴うデータ入出力(flashの活用)

JavaEEで何らかの処理を行い、リダイレクトさせる場合、リダイレクト前のデータを保存し、リダイレクト後のページにデータをもちこしたいときなどがあると思います。 オブジェクトの変数自体はスコープアノテ …

アーカイブ