クラスのフィールド名とメソッド名を検索する
あるクラスがどういうフィールドやメソッドをもっているか?を調べるには下記のようにします
Class c = Class.forName("クラス名"); Field[] fields = c.getFields(); //フィールド名 Method[] methods = c.getMethods(); //メソッド名 String methodName = method[0].getName();これらのメソッドはフィールドインスタンスやメソッドインスタンスを入手するものなので、特定のメソッド名(またはフィールド名)を取ってくることも可能です。その場合は、下記のように記述します。
Method method = c.getMethod(メソッド名, 引数の型<可変長>);なお、getMethodsやgetFieldsではパグリックなフィールドやメソッドしか入手できませんが、getDeclaredMethodsやgetDeclaredFieldsを利用するとプライベートなフィールドやメソッドを入手することが可能です。
メソッドを実行する
上記のmethodsはメソッドインスタンスの配列です。これを利用して下記のように検索したメソッドを実行します。下記では,実行対象となるインスタンスを生成してメソッドをinvokeする際に渡してます。staticなメソッドの場合は不要です(第一引数はnullです)。
Constructor constructor = c.getConstructor(new Class[] {}); Object o = constructor.newInstance(new Object[] {}); methods[i].invoke(o, null);
フィールドにアクセスする
上記で入手したフィールドにアクセスする方法は下記の通りです。
fields[0].set(obj, "abc"); String n = (String)fields[0].get(obj);O/Rマッパーを自作するときは,プライベートなフィールド名を利用するとよいかもしれません。
0 件のコメント:
コメントを投稿