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

動的な置換

前回、置換に関する記事をまとめましたが動的な置換について勉強する機会があったのでまとめておきます。一般に置換表現というのはほとんどが静的なものかと思います。 例えば <intpu type=&# …

no image

Git→Jenkinsの連携 その2

以前、このエントリーでGitとjenkinsの連携に関して書いたんですが、今回jenkinsとgitのソースが別環境にあるケースの構築をしたのでメモしておきます。 Contents1 Jenkinsで …

no image

JPQLでの算術関数

複雑なJPQLを書いていると、通常のレコードの取り出しだけではなく、合計(SUM)や算出(COUNT)などのいわゆる算術関数を使うことが一般的です。 JPQLでもこれらを通常通り扱うことができます。 …

no image

O/Rマッパー iciqlについて

以前、このブログでも紹介したO/Rマッパーのiciqlについて、使い方や問題点がある程度わかったので書いておきます。 Contents1 インストール2 自動生成3 注意点3.1 Date型のインポー …

no image

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

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

アーカイブ