- どうまとめたらいいのか分からないのでとりあえずこの名前でページを作っておきます。
- むずかしいかもしれません。とりあえずほうっておいてください。
Java
//以下を、わざとリフレクションを使って書いた場合
int length = new String("ABC").length();
//Class クラス のインスタンスを得る
Class strClass = Class.forName("java.lang.String");
//コンストラクタを得る
Constructor strConstructor = strClass.getConstructor(String.class);
//インスタンスを生成する
Object strObj = strConstructor.newInstance("ABC");
//文字列生成を行なうためのメソッドを取得
Method mLength = strClass.getMethod("length", new Class[0]);
//長さを得る
Integer length = (Integer)mLength.invoke(strObj, new Object[0]);
- リフレクションを使えばアクセス修飾子を超えたアクセスも可能になります。
//Hoge.java
public class Hoge{
String name;
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
}
//mainクラス
Hoge hoge = new Hoge();
Class c = hoge.getClass();
//setNameメソッドを抽出
Method m = c.getMethod("setName", new Class[]{String.class});
//setNameメソッドを実行
m.invoke(hoge, new Object[]{"ほげ"});
//getNameメソッドを抽出
m = c.getMethod("getName", new Class[0]);
//getNameメソッドを実行
System.out.println(m.invoke(hoge, new Object[0])); //ほげ
Fieldを使う方法
Field f = c.getDeclaredField("name");
f.setAccessible(true);
Object value = f.get(hoge);//フィールドから値を得る
f.set(hoge, "hogehoge");//フィールドに値をセット
System.out.println(m.invoke(hoge, new Object[0])); //hogehoge
PHP
- あるのかな・・・?
- PHP5.0よりリフレクションクラスが追加されました
javascript
最終更新:2014年01月07日 14:56