Change private static final field using Java reflectionAndroid: thay đổi trường tĩnh riêng tư bằng cách sử dụng phản chiếu java
Tôi đã làm theo hướng dẫn trong liên kết ở trên để thay đổi trường tĩnh riêng tư bằng cách sử dụng phản chiếu java. Tôi có một đối tượng có tên là "dữ liệu". Bên trong "dữ liệu", có biến cố định tĩnh cuối cùng có tên "loại". Tôi muốn đặt "loại" thành rỗng. Đây là mã của tôi.
Field field = data.getClass().getDeclaredField("type");
field.setAccessible(true);
Field modifiersField = Field.class.getDeclaredField("modifiers");
modifiersField.setAccessible(true);
modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
field.set(data, null);
Tôi đã thử làm điều này trên Java 1.7 với mã tương tự và nó hoạt động. Nhưng chạy mã này trên Android tạo ra lỗi sau: java.lang.NoSuchFieldException: sửa đổi
Tôi đoán "công cụ sửa đổi" không phải là một trường trong lớp Field trên Android.
Làm cách nào để khắc phục sự cố này?
Bạn ... không thể thay đổi _modifiers trên trường class_ tại _runtime._ –
Tôi có thể theo liên kết đó. – jas7
Hãy nhớ rằng trình biên dịch Java có thể có giá trị nội tuyến của các trường cuối cùng tĩnh nguyên thủy. Việc thực hiện phép thuật phản xạ này có thể dẫn đến hành vi kỳ quái. – millimoose