私は、リフレクションを使用して実行中のJavaアプリケーションのフィールドを取得するプロジェクトに取り組んでいます。
なんとかフィールドを取得できましたが、読み取りも書き込みもできません。これは私がウェブ上で見つけた例です:
Class aClass = MyObject.class
Field field = aClass.getField("someField");
MyObject objectInstance = new MyObject();
Object value = field.get(objectInstance);
field.set(objetInstance, value);
問題は、実行中のjarファイルのクラスを使用していて、操作しようとしているクラスがclassLoaderから取得されていることです。したがって、「MyObject.class」の代わりに「.class」があります。'MyObject'を取得するために、ClassLoaderを使用しようとしましたが、機能しませんでした。
'.class'を使用する場合:
Object value = field.get(theLoadedClass);
このエラーが発生します:
java.lang.IllegalArgumentException: Can not set int field myClass.field to java.lang.Class
ありがとう。