reflectionというと、「反射」という訳語を思い浮かべる人が多いかもしれませんが、 「反省」という意味があります。たとえば、哲学用語として、「自己自身における 反省としての本質」とか「反省的意識」というばあいの「反省」は、reflectionに 他なりません。Set Theoryにも、reflection Theorem というのがありましたね。 introspectionという言葉は、少し難しい単語ですが、これも、哲学や心理学で見かける ことがあります。普通は、「内省」と訳されることが多いようです。 reflectionもintrospectionも、いずれも、「直接的にではなく、自分自身を、反省的に 振り返って獲得する」という意味があります。両者は、オブジェクトのpublic宣言 されたフィールドやメソッドに対する直接的なアクセスとは別に、クラスのフィールド 名やメソッドの引数の型、Beansのイベントの特徴などの、クラスとBeanが持つ メタ情報へのアクセスを可能とします。
reflectionは、あるクラスが、どのようなフィールドとメソッドとコンストラクタを 持つのかを教えてくれます。reflectionは、JDK1.1では、すべてのクラスに対して 動作する、きわめて基本的でプリミティブな機能です。Javaの「本体」ともいうべき、 java.langパッケージと、その拡張であるjava.lang.reflectパッケージで定義されて いるところにも、そうした性格が表われています。 一方、introspectionは、あるBeanが、どのようなプロパティ、イベント、メソッドを 持つかを、われわれに知らせます。introspectionは、クラスではなく、Java Beansの 世界で初めて意味を持ちますし、内部的にはreflectionを利用していますので、 reflectionよりも、抽象度の高いレベルでのアプローチと考えることが出来ます。 introspectionについては、あとで詳しくみることにします。
------------------------------------------------------------------------------- パッケージ 主な対象 ------------------------------------------------------------------------------- reflection java.lang Class : Field, Method, Constructor (低水準) java.lang.reflect ------------------------------------------------------------------------------- introspection java.beans Beans : Property, Event, Method (高水準) (Customizer, Default情報) -------------------------------------------------------------------------------