Java Reflectionは、コンパイル時間ではなく、実行時にクラスとそのメンバー(フィールド、メソッド、コンストラクター)を調べて相互作用する強力なメカニズムを提供します。これは、 java.lang.Refflect
パッケージを使用して達成されます。使用方法の内訳は次のとおりです。
最初に、検査するクラスを表す code> code
オブジェクトを取得する必要があります。これは、いくつかの方法で実行できます。
class.forname()
:このメソッドを使用して、完全に適格なクラス名を文字列として受け取ります。例: class<?> myclass = class.forname(" com.example.myclass");
このメソッドは classNotFoundException
例: myclass myobject = new MyClass();クラス<?> myclass = myobject.getClass();
int
のようなプリミティブタイプの int.class
。コンストラクター: constructor<> [] constructors = myclass.getConstructors();
これは、すべての public コンストラクターの配列を返します。特定のコンストラクター(例:パラメータータイプによる)を取得するには、 myclass.getConstructor(parametertype1.class、parametertype2.class、...);
メソッド[]メソッド= myclass.getmeths()特定の方法を取得するには、<code> myclass.getMethod(&quot; methodname&quot;、parametertype1.class、parametertype2.class、...);
非公開メソッドにアクセスするには、myclass.getdeclaredmethods() myclass.getFields(); これは、すべての public フィールドの配列を返します。メソッドと同様に、非パブリックフィールドに myclass.getDeclaredfields()
を使用します。 field.get(object)
/ field.set(object、value)
、それぞれ。 invocationTargetException
、 Illegalaccessexception
、および nosuchmethodexception <h2>などの潜在的な例外を処理することを忘れないでください。ただし、追加の手順が必要です。 <code> myclass.getDeclaredFields()
または myclass.getDeclaredMethods()
を呼び出すだけで、プライベートを含むすべての すべてのメンバーにアクセスできます。ただし、それらに直接アクセスまたは変更しようとすると、 Illegalaccessexception
がまだスローされます。これを克服するには、 setAccessible(true)
メソッドをフィールド
またはメソッド
オブジェクトで使用する必要があります。 privatefield.setAccessible(true);オブジェクト値= privatefield.get(myobject); //プライベートフィールドプライベートフィールドにアクセスしてください。 //プライベートフィールドの変更
setAccessible(true)
を使用して慎重に実行する必要があります。アクセス修飾子をバイパスし、カプセル化を破壊する可能性があり、コードの予期せぬ結果につながります。一般的に、絶対に必要でない限り、プライベートメンバーに直接アクセスすることを避けるのが最善です。
このコードスニペットは、 className
で指定されたクラスのインスタンスを動的に作成します。 getConstructor
メソッドは、パラメータータイプに基づいて適切なコンストラクターを見つけます。 newinstance
メソッドは、そのコンストラクターを使用してクラスのインスタンスを作成します。 classNotFoundException
、 nosuchmethodexception
、 instantiationexception
、
以上がJava Reflectionを使用して、実行時にクラスを検査および操作するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。