Khi tôi đọc "java hiệu quả", tác giả nói với tôi rằng một kiểu enum phần tử đơn là cách tốt nhất để thực hiện một singleton, bởi vì chúng ta không phải xem xét các cuộc tấn công serialization hoặc phản chiếu tinh vi . Điều này có nghĩa là chúng ta không thể tạo ra một thể hiện của enum bằng cách sử dụng sự phản chiếu, đúng không? Tôi đã thực hiện một số kiểm tra, một lớp enum ở đây:Làm thế nào để tạo ra một thể hiện của enum bằng cách sử dụng sự phản chiếu trong java?
public enum Weekday {}
Sau đó, tôi đã cố gắng để tạo ra một thể hiện của Weekday:
Class<Weekday> weekdayClass = Weekday.class;
Constructor<Weekday> cw = weekdayClass.getConstructor(null);
cw.setAccessible(true);
cw.newInstance(null);
Như bạn đã biết, nó không hoạt động. Khi tôi thay đổi từ khóa "enum" thành "class", nó hoạt động. Tôi muốn biết tại sao. Cảm ơn bạn trước.
Bạn có thể tạo một lớp enum một cách nhanh chóng bằng cách sử dụng tạo mã byte. Nhưng trong trường hợp đó, enum sẽ không tồn tại trong thời gian biên dịch, vì vậy bạn sẽ không thể tham khảo nó trong phần còn lại của mã của bạn (bạn chỉ có thể truy cập nó thông qua sự phản chiếu, đó là một hoạt động thời gian và không phải là một cơ chế biên dịch thời gian). –