Tôi đang làm việc trên một dự án sử dụng sự phản chiếu để có được các trường của một ứng dụng java đang chạy.Câu hỏi phản chiếu Java
Tôi đã quản lý để có được các trường, nhưng tôi không thể đọc hoặc viết thư cho họ. Đây là ví dụ tôi tìm thấy trên web:
Class aClass = MyObject.class
Field field = aClass.getField("someField");
MyObject objectInstance = new MyObject();
Object value = field.get(objectInstance);
field.set(objetInstance, value);
Vấn đề là tôi sử dụng các lớp từ tệp jar đang chạy và các lớp tôi cố gắng thao tác được lấy từ classLoader. Vì vậy, thay vì 'MyObject.class' tôi chỉ có '.class'. Để có được 'MyObject' tôi đã cố gắng sử dụng một ClassLoader nhưng điều đó không hoạt động.
Nếu tôi chỉ sử dụng' .class':
Object value = field.get(theLoadedClass);
tôi sẽ nhận được lỗi này:
java.lang.IllegalArgumentException: Can not set int field myClass.field to java.lang.Class
Cảm ơn.
Bạn có ý gì khi 'tệp jar đang chạy'? Là nó trên classpath của bạn? – wjans