tôi cố gắng để nhanh chóng các lớp bên trong định nghĩa trong mã Java sau:Làm thế nào để khởi tạo lớp bên trong với sự phản ánh trong Java?
public class Mother {
public class Child {
public void doStuff() {
// ...
}
}
}
Khi tôi cố gắng để có được một thể hiện của trẻ em như thế này
Class<?> clazz= Class.forName("com.mycompany.Mother$Child");
Child c = clazz.newInstance();
tôi nhận được ngoại lệ này:
java.lang.InstantiationException: com.mycompany.Mother$Child
at java.lang.Class.newInstance0(Class.java:340)
at java.lang.Class.newInstance(Class.java:308)
...
Tôi đang thiếu gì?
Uhm, lớp bên trong của bạn không tĩnh ... Đây có phải là mục đích không? Đến từ một nền C# có thể? ;) – fge
Cảm ơn bạn đã đề xuất ý tưởng "tĩnh"! Trong thực tế, sử dụng một lớp lồng nhau tĩnh thay vì một lớp bên trong làm cho cuộc sống của tôi dễ dàng hơn. – Stephan
Vấn đề là, nếu một lớp bên trong không được khai báo tĩnh, các cá thể của lớp này phụ thuộc vào sự tồn tại của một cá thể của lớp bên ngoài; điều này khác với C# trong đó tất cả các lớp bên trong là "tĩnh" theo mặc định, và có thể được khởi tạo mà không có một cá thể mẹ. – fge