Javaは言語としてリフレクションをサポートしている。他にもPerlとかRubyとかも。(Cはサポートしているんだっけか?)
コードはとても簡単。
// リフレクションなし Foo foo = new Foo(); //インスタンス foo.hello(); //メソッド呼び出し // リフレクション Class clazz = Class.forName("Foo"); Method method = clazz.getMethod("hello", null); //メソッドを抽出 method.invoke(clazz.newInstance(), null); //インスタンス + メソッド呼び出し
こんな感じ。リフレクションの2行目はメソッドを抽出している。
フレームワークでは、このリフレクションが多用されている。