Java リフレクション学習<BR>いわゆるリフレクションは、実行時にオブジェクト タイプ情報を取得する操作として理解できます。従来のプログラミング方法では、コンパイル段階で使用する型をプログラマが決定する必要がありますが、リフレクションの助けを借りて、プログラマはこの情報を動的に取得し、より移植性の高いコードを作成できます。厳密に言えば、リフレクション機構はどの言語でも実装できるため、リフレクションはプログラミング言語の機能ではありませんが、プログラミング言語自体がリフレクションをサポートしている場合、リフレクションの実装ははるかに便利になります。
1. 型クラスを取得します。 <BR>Java ではすべてがオブジェクトであり、通常使用するオブジェクトは Object クラスから直接または間接的に継承していることがわかっています。 Object クラスには、インスタンスの型クラスを取得するために使用できる getClass と呼ばれるメソッドが含まれています。すべてがオブジェクトであり、Java では型も例外ではないため、型クラスは型を表すクラスを指します。すべての型クラスは Class クラスのインスタンスです。たとえば、次のコードは次のとおりです。
A a = 新しい A();
if(a.getClass()==A.class)
System.out.println("等しい");
else System.out.println("不等");
結果は「等しい」と出力されます。
オブジェクト a は A のインスタンス、つまり A の特定のクラスであることがわかります。 if ステートメントで a.getClass() を使用して返される結果は、まさに A の型クラスです。 Java では、「 Type.class 」メソッドを使用できます。 a.getClass() は A の型クラス、つまり A.class を取得するため、上記のコードの実行結果は「equal」を出力します。型クラスは 1 対 1 に対応していることに注意してください。したがって、A が B のサブクラスであると仮定すると、次のコードは次の出力を取得します。 「不平等」:
A a = 新しい A();
if(a.getClass()==B.class)
System.out.println("等しい");
else System.out.println("不等");
したがって、インスタンスがわかっている場合は、インスタンスの「getClass()」メソッドを使用してそのオブジェクトの型クラスを取得でき、型がわかっている場合は、「.class」メソッドを使用してその型の型クラスを取得できます。 。
2. 型情報の取得<BR>型クラスを取得した後、いくつかのメソッドを呼び出して型情報を取得できます。主なメソッドは次のとおりです。
getName():String: 型の完全な名前を取得します。
getSuperClass():Class: この型の直接の親クラスを取得します。型に直接の親クラスがない場合は、null を返します。
getInterfaces():Class[]: この型によって実装されたすべてのインターフェイスを取得します。
isArray():boolean: 型が配列かどうかを判断します。
isEnum():boolean: 型が列挙型であるかどうかを判断します。
isInterface():boolean: タイプがインターフェイスかどうかを判断します。
isPrimitive():boolean: 型が基本型であるかどうか、つまり int、boolean、double などであるかどうかを判断します。
isAssignableFrom(Class cls):boolean: この型が cls 型の親 (先祖) クラスであるか、親 (先祖) インターフェイスであるかを判断します。
getComponentType():Class: 型が配列の場合、配列のコンポーネント型を返します。
また、型変換などの操作も行うことができます。主な方法は次のとおりです。
asSubclass(Class clazz):クラス: このタイプを変更します