気まま日記(kimamanikki)

気の向くままに、のんびり更新しますヽ(´∀`)ノ

 
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
11


スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Method.invoke を使って文字列からメソッドを実行する

Javaのjava.lang.reflectパッケージを使用すると、文字列からクラスのメソッドを実行することができる。

例えばDBから取得したカラムをフィールドに持つBeanクラスなんかを作成して、(データファイルやHTTPリクエストからの)パラメータをフィールド名を合わせておけば、いちいち
hoge.set***(request.getParameter("param"));
とか書かなくても、マッピング個所を自動生成させたりとか出来る。
(そんなことをわざわざ実装する人がいるとも思えないが)

これはDBのマッピングフレームワークであるiBATISや、WebアプリケーションフレームワークのStrutsなんかで利用されてたりする。

実際の開発者がこの方法を使うときってあまりないような気もする。

もし使うなら、ListやMapに格納された項目を、同じような項目名や、命名規則があるようなメソッドに対して、判断処理をさせずに設定したりする時とか?
(電話番号リストを電話番号1、電話番号2、電話番号3のフィールドに格納するとかDBに入れるとかそんな感じ?)

■ReflectionTest.java
package test;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

public class ReflectionTest {

	public static void main(String[] args) {
		
		List list = new ArrayList();
		
		list.add("09011111111");
		list.add("09022222222");
		list.add("09033333333");
		
		TelnoInfo telnoInfo = new TelnoInfo();
		
		Class c = telnoInfo.getClass();
		
		for (int i = 0; i < 3; i++) {
			try {
				
				Method method = c.getMethod("setTelno" + (i + 1), new Class[]{String.class});
				
				method.invoke(telnoInfo, list.get(i));
				
			} catch (SecurityException e) {
				e.printStackTrace();
			} catch (NoSuchMethodException e) {
				e.printStackTrace();
			} catch (IllegalArgumentException e) {
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				e.printStackTrace();
			} catch (InvocationTargetException e) {
				e.printStackTrace();
			}
		}
		
		System.out.println(telnoInfo.getTelno1());
		System.out.println(telnoInfo.getTelno2());
		System.out.println(telnoInfo.getTelno3());

	}

}

■TelnoInfo.java
package test;

public class TelnoInfo {
	
	private String telno1 = "";
	private String telno2 = "";
	private String telno3 = "";
	
	public String getTelno1() {
		return telno1;
	}
	public void setTelno1(String telno1) {
		this.telno1 = telno1;
	}
	public String getTelno2() {
		return telno2;
	}
	public void setTelno2(String telno2) {
		this.telno2 = telno2;
	}
	public String getTelno3() {
		return telno3;
	}
	public void setTelno3(String telno3) {
		this.telno3 = telno3;
	}

}


Comments

Leave a Comment


Body

カウンター
セルフィ

 
Twitter



 
 
クラッチ作品集
 
 
プロフィール

クラッチ

気まま日記バナー

・クラッチ
このブログの管理人

 
 
管理人へメール
メールフォームを開く
 
 
ブロとも申請フォーム
 

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。