Dado que un constructor enum solo puede invocarse mediante sus constantes, ¿por qué se permite que sea privado del paquete?¿Por qué una enumeración tiene un constructor privado de paquetes?
Respuesta
El constructor en realidad no es un paquete privado ... implícitamente es private
la forma en que los métodos de interfaz son implícitamente public
incluso si no agrega la palabra clave.
La sección correspondiente de la JLS (§8.8.3) afirma:
If no access modifier is specified for the constructor of a normal class, the constructor has default access.
If no access modifier is specified for the constructor of an enum type, the constructor is
private
.It is a compile-time error if the constructor of an enum type (§8.9) is declared
public
orprotected
.
cita: http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.8.3 –
@Ryan Stewart: Gracias por encontrar eso. – ColinD
Es una peculiaridad de la lengua: constructores de enumeración son implícitamente privado.
Curiosamente, si se declara un constructor enum paquete visible, así:
public enum MyEnum {
A(0),
B(1);
private final int i;
MyEnum(int i) {
this.i = i;
}
public int getI() {
return i;
}
}
no puede referirse a ella de otra clase en el paquete. Si lo intenta, se obtiene el error del compilador:
Cannot instantiate the type MyEnum
Aparentemente puede intentar esto con enum siendo clase anidada estática o en un método de la enumeración. Sí, la compilación falla con dicho error. – Vlasec
"si declaras un constructor enum visible para el paquete" ... pero en realidad no hay forma de hacerlo. – raghavsood33
@ raghavsood33 sí puedes. Vea el código compilable que agregué a mi respuesta que demuestra un constructor visible para el paquete. – Bohemian
- 1. ¿Por qué necesitamos un constructor privado?
- 2. ¿Por qué C no tiene paquete privado?
- 3. En Java, ¿cómo hago una clase con un constructor privado cuya superclase también tiene un constructor privado?
- 4. ¿Por qué no es privado el constructor de String()?
- 5. constructor privado
- 6. ¿Por qué puedo llamar al constructor privado desde? Ámbito global?
- 7. constructor privado y final
- 8. ¿Por qué PHP no tiene un constructor predeterminado?
- 9. ¿Cómo puedo acceder a un constructor privado de una clase?
- 10. ¿Perl tiene un tipo de enumeración?
- 11. ¿Por qué boost no tiene un make_scoped()?
- 12. ¿Podemos tener un constructor privado en una clase estática?
- 13. ¿Por qué escribir explícitamente "privado"?
- 14. ¿Scheme/Racket tiene una operación de enumeración?
- 15. ¿Por qué se requiere el constructor predeterminado en una clase padre si tiene un constructor argumento-ed?
- 16. C++ - ¿Qué está haciendo esto si el constructor es privado?
- 17. Instanciando clase interna con constructor privado
- 18. ¿Por qué obtengo el error "type no tiene typeinfo" con un enumeración tipo
- 19. Constructor privado en la clase abstracta
- 20. ¿Por qué pasar por referencia implica un constructor de copia?
- 21. ¿Cuál es la necesidad de un constructor privado en C#?
- 22. Cómo persistir un objeto que tiene un campo de enumeración
- 23. ¿Por qué Socket.BeginReceive pierde paquetes de UDP?
- 24. Java: ¿la clase Object tiene un constructor?
- 25. no se puede definir el constructor como protegido o privado. ¿por qué?
- 26. ¿Qué es un ejemplo de Java de la expresión "captura de constructor privado"?
- 27. ¿Por qué stdarg.h tiene una macro «__va_size»?
- 28. ¿Cómo crear una instancia de un objeto con un constructor privado en C#?
- 29. ¿Cómo puedo instanciar una clase que está teniendo constructor privado
- 30. Java Spring Bean con constructor privado
para permitir a ahorrar un poco de espacio de código y evitar la verbosidad innecesaria (como las interfaces no necesitan 'abstract' pública antes de cada método) –
@ratchetfreak: Es no como las interfaces. Los métodos de interfaz son * siempre * 'público resumen'. Hacer los modificadores explícitos está permitido, pero no hay forma de cambiarlos. –
@RyanStewart tampoco hay forma de que llame a un constructor enum para que sea lógicamente privado y permita que el paquete privado permita guardar esos pocos caracteres –