忍者ブログ

ビーキョウのIT

このブログは99%ののほほんと1%のお菓子でできています。

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。


リフレクション

こんちゃ(´・ω・)ノ

今回はリフレクションについてです。

リフレクションとは、クラスの情報を取得して
クラスの生成やメソッドを利用したりするAPIです。

なかなかJavaの中でも難しいところだったりします。

◆例
public class Sample{
   public int getCount(){
      return 10;
   }
}

【サンプル】通常
Sample sample = new Sample();
int count = sample.getCount();

【サンプル】リフレクション
//インスタンス作成
Object instance = Sample.class.newInstance();
//メソッド取得
Method method = Sample.class.getMethod("getCount", new Class[0]);
//メソッド実行
Integer count = (Integer)method.invoke(instance, new Object[0]);

となります。
「え?なんか色々書いてるし通常のほうが簡単でいいんじゃないか?」
と思うかもしれませんが、
これの重要なところは"文字列でメソッドを取得"しているところです。
文字列指定のため、文字列を引数などで動的に変わるようにするだけで、
動的に実行したいメソッドを決定できるのです。
また「Sample.class」の部分は「Class.forName("Sample")」とも書き換えられるため、
クラスもメソッドも動的に決定できるわけです。


◆リフレクションを使って取得できる情報または処理
・クラス名とクラスのインスタンス
・メソッドとメソッドの実行
・フィールドの名前と値
・コンストラクタ
などなど。まだ色々あると思います。

◆メリッド
リフレクションを使用することにより、
動的に使用するクラスやメソッドを変えることができる。

◆デメリット
・クラスやメソッドが変わるため例外がcatchしずらい。
・実行されるまでどのクラスやメソッドを使用するのかわからないため、処理の流れがわかりにくい。
・インタプリタ実行のため処理速度が遅い。
→ループ文などで何度も呼ばなければ全然気にならない程度。

◆使用されている機能
一般的なプログラミングではあまり使用しませんが、
StrutsなどのWebアプリケーションのフレームワークなどで多く使用されています。 

拍手[0回]

PR

COMMENT

Name
Title
Mail
URL
Color
Emoji Vodafone絵文字 i-mode絵文字 Ezweb絵文字
Comment
Pass   コメント編集用パスワード
 管理人のみ閲覧

TRACKBACK

Trackback URL:

カレンダー

04 2024/05 06
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

最新コメント

[11/13 NEX-C3]
[01/24 R]
[07/30 ビーキョウ]
[07/25 unknown]
[06/24 ブログランキング]

最新トラックバック

バーコード

広告

カウンター

ブログ内検索

プロフィール


HN:ビーキョウ
職業:SI屋(PG、SE)
<自己紹介>
ちゃお(´・ω・)ノ
ビーキョウです。
どんどんスキルアップして、 その中で学んだことを忘れないようにメモ代わり的な 感じで記事を書いていこうという考えです。

なので、適当な部分が多々あるとは思いますが、 なにとぞよろしくお願いします
(´ ▽`)

バナーエリア

Copyright ©  -- ビーキョウのIT --  All Rights Reserved
Designed by CriCri / Photo by Geralt / Powered by [PR]
/ 忍者ブログ