Cuando estoy leyendo el "java efectivo", el autor me dijo que un tipo de enumeración de elemento único es la mejor manera de implementar un singleton, porque no tenemos que considerar sofisticados ataques de serialización o reflexión . Esto significa que no podemos crear una instancia de enum usando la reflexión, ¿es así? He hecho algunas pruebas, una clase de enumeración aquí:¿Cómo crear una instancia de enum usando reflection en java?
public enum Weekday {}
Luego trató de crear una instancia del Día de la semana:
Class<Weekday> weekdayClass = Weekday.class;
Constructor<Weekday> cw = weekdayClass.getConstructor(null);
cw.setAccessible(true);
cw.newInstance(null);
Como saben, no funciona. Cuando cambio la palabra clave "enum" por "clase", funciona. Quiero saber por qué. Gracias pre.
Puede crear una clase enum sobre la marcha utilizando la generación de código byte. Pero en ese caso, la enumeración no existiría en tiempo de compilación, por lo que no sería capaz de referirse a ella en el resto de su código (solo podría acceder a ella a través de la reflexión, que es una ejecución -tiempo y no un mecanismo de tiempo de compilación). –