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

JSFでのCSVダウンロード機能

JSF+CDIでCSVダウンロード機能を実装するときの処理です。 結構、汎用的でいろんなところででてきますね。 Contents1 コード2 参考リンク コード [crayon-65e67211d7c …

no image

JPAのdetach

このブログで何回か書いてきたんですが、JPAを使うときにpersisit=insert,merge=updateではないです。 参考リンク JPAまとめ JPAでのデータベースとの同期 実はJPAでf …

no image

型パラメータに関して その2

Javaでオブジェクト指向に基づいたコーディングをするために必須であり、最初の難関だったのが型パラメータでした。 Contents1 型パラメータが必要なケース2 型パラメータの制限3 クラスインスタ …

no image

JSONへの変換

近年はJavaSciprtを利用した動的なサイトが多いため、データのやり取りをAjaxで行うことも多かったりします。 JavaScriptの場合、データをJSON形式で扱うため、サーバー側からレスポン …

no image

persistence.xmlのプロパティについて

JavaEEではデータベースとの設定情報はpersistence.xmlに記述します。 (ユーザー名、パスワード、ポート、driver名、データベース名などの情報はglassfish-resource …

アーカイブ