たとえばコマンドラインツールを開発していると、main
メソッドをテストしたりデバッグしたりしたいということがあります。そのような場合リフレクションを使うと便利ですが、どのようにすればmain
メソッドをリフレクションから実行できるでしょうか? その結論が以下のサンプルです。
try {
Method mainMethod = Sample.class.getMethod("main", String[].class);
String[] args = {"arg1", "arg2", "arg3"};
mainMethod.invoke(null, (Object) args);
} catch (NoSuchMethodException
| SecurityException
| IllegalAccessException
| IllegalArgumentException
| InvocationTargetException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
ポイントとしてはinvoke
でしょうか。第1引数にnull
を与えて、以降の可変長引数部分はObject
にキャストしたargs
を指定する。この2点を守って楽しくリフレクションしましょう(´・ω・`)