package pkg; /** * Class#getMethod() と Method#invoke() のサンプル */ class MethodInvoke { public static void main(String[] args) { try { // "Printer" のClassオブジェクト Class cls = Printer.class; // 動的に得るときは Class.forName("pkg.Printer") // このときはパッケージ名省略不可。 // 得ようとするメソッドの引数パターンのClass配列 Class[] params = { String[].class, // オブジェクト配列の場合 String.class, // オブジェクトの場合 int[].class, // プリミティブ配列の場合 int.class // プリミティブの場合。または Integer.TYPE }; // Printer#print(String[], String, int[], int) を得る java.lang.reflect.Method meth = cls.getMethod("print", params); // 実は Printerのインスタンス Object obj = cls.newInstance(); // メソッド起動 meth.invoke( obj, // クラス(static)メソッドの場合はnull new Object[] { new String[] {"foo","bar"}, "hogehoge", new int[] {1,2}, new Integer(3) } ); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (java.lang.reflect.InvocationTargetException e) { e.printStackTrace(); } } }