tôi có 2 lớp: Father
và Child
Đặt giá trị lĩnh vực tư nhân với sự phản ánh
public class Father implements Serializable, JSONInterface {
private String a_field;
//setter and getter here
}
public class Child extends Father {
//empty class
}
Với phản ánh Tôi muốn thiết a_field
trong Child
lớp:
Class<?> clazz = Class.forName("Child");
Object cc = clazz.newInstance();
Field f1 = cc.getClass().getField("a_field");
f1.set(cc, "reflecting on life");
String str1 = (String) f1.get(cc.getClass());
System.out.println("field: " + str1);
nhưng tôi có một ngoại lệ:
Ngoại lệ trong chuỗi "chính" java.lang.NoSuchFieldException: a_field
Nhưng nếu tôi cố gắng:
Child child = new Child();
child.setA_field("123");
nó hoạt động.
Sử dụng phương pháp setter Tôi có cùng một vấn đề:
method = cc.getClass().getMethod("setA_field");
method.invoke(cc, new Object[] { "aaaaaaaaaaaaaa" });
Bạn cần phải nhận được lớp cha của lớp đầu tiên, trước khi beeing thể acces lĩnh vực này. [câu hỏi SO khác] (http: // stackoverflow.com/questions/3567372/access-to-private-inherited-fields-qua-reflection-in-java) – SomeJavaGuy
Trường không phải là một phần của lớp con Vì nó là riêng tư, nó thậm chí không hiển thị trong lớp con. setters được công khai và được thừa hưởng, có nghĩa là chúng có thể được gọi là nếu chúng được khai báo trong lớp Child. – f1sh
Thay vì truy xuất trường riêng tư, hãy đặt giá trị của nó bằng cách truy xuất phương thức setter của nó Phương thức –