next up previous contents
Next: Reflectionの三つの働き Up: Reflection Previous: Reflection

reflection と introspection

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情報)
-------------------------------------------------------------------------------



maruyama@wakhok.ac.jp