He visto construcciones con una enumeración declarada dentro de una enumeración. Para qué se usa esto ?enum anidado, ¿por qué se usa?
Respuesta
Enum en Java no se puede extender, por lo que si quiere cotejar enumeraciones fuertemente relacionadas en un solo lugar, puede utilizar estas construcciones enum anidadas. Por ejemplo:
public enum DepartmentsAndFaculties
{
UN (null, "UN", "University"),
EF (UN, "EF", "Engineering Faculty"),
CS (EF, "CS", "Computer Science & Engineering"),
EE (EF, "EE", "Electrical Engineering");
private final DepartmentsAndFaculties parent;
private final String code, title;
DepartmentsAndFaculties(DepartmentsAndFaculties parent, String code, String title)
{
this.parent = parent;
this.code = code;
this.title = title;
}
public DepartmentsAndFaculties getParent()
{
return parent;
}
public String getCode()
{
return code;
}
public String getTitle()
{
return title;
}
}
Aquí, las enumeraciones internas constan de {parent enum, code, title} combinaciones. Ejemplo de uso:
DepartmentsAndFaculties cs = DepartmentsAndFaculties.CS;
cs.getTitle();
Puede ver el poder de las enumeraciones anidados jerárquicos en la construcción de entidades/enumeraciones.
esto suena exactamente como lo que tengo que hacer. actualmente tengo una clase que contiene enumeraciones relacionadas. Pero en su código solo veo una enumeración DepartmentsAndFaculties declarada. ¿dónde está la otra enumeración? – mafalda
¿La otra enumeración? DepartmentsAndFaculties es una enumeración y se extiende por las enumeraciones de las Naciones Unidas, EF, CS y EE. Puede referirse a sub-enums a través de DepartmentsAndFaculties.XX donde XX es un nombre de referencia de sub-enum. – Juvanis
Puede significar un Enum como tipo interno. Esto se ve más típicamente cuando el tipo externo es una clase o una interfaz, pero supongo que no hay ninguna razón para que esto no se pueda hacer con enum como un elemento externo.
Los tipos internos se refieren en parte a la organización del código. Pueden ser útiles para evitar crear un grupo de archivos separados cuando tiene algunos tipos relacionados. A veces puede hacer que el nombre de tipo sea más intuitivo. Por ejemplo, vea la clase Map y su clase de Entrada interna. La mayoría de las referencias externas a Entry usarían el formato Map.Entry, que es muy legible.
La otra razón para los tipos internos es que si el tipo externo es una clase o una enumeración, entonces el tipo interno puede ser no público. Esto es útil para ocultar tipos que son detalles de implementación del tipo externo.
sí me refiero a enum como un tipo interno. ¿Tiene algunas referencias de código que usan la enumeración interna? – mafalda
He utilizado enumeraciones anidadas en casos excepcionales en los que quería aplicar una convención de nomenclatura sobre los valores enum, si las adiciones de nuevos nombres tendrían consecuencias para las operaciones u otras personas. Aquí está un ejemplo:
public enum MessageTemplateName {
account_verify,
vendor_job_request,
account_job_confirmed,
vendor_job_confirmed,
account_friend_request,
account_job_accepted,
vendor_job_accepted_by_other;
/** Make sure you tell operations if you're adding a new recipient */
private enum Recipient { account, vendor }
private Recipient recipient;
private String messageName;
MessageTemplateName() {
final int firstUnderscore = name().indexOf('_');
recipient = Recipient.valueOf(name().substring(0, firstUnderscore));
messageName = name().substring(firstUnderscore+1);
}
public String getTemplateUrl (String baseUrl) {
if (!baseUrl.endsWith("/")) baseUrl += "/";
return baseUrl + recipient.name() + "/" + messageName + ".vm";
}
}
estoy usando una enumeración porque quiero ser capaz de pasar alrededor de un "nombre de plantilla de mensaje" genérico en varios lugares. Como puede ver, la primera parte del nombre enum corresponde a un directorio en un servidor, y el resto del nombre se refiere a un nombre de archivo de plantilla de Velocity. Si los compañeros ingenieros comenzaron a introducir nuevas constantes, me gustaría asegurarme de que se archivaron con el "destinatario" apropiado, o si es legítimo que se necesite crear un nuevo destinatario, que es un esfuerzo consciente hacerlo, e informarán operaciones (crear el directorio en producción, colocar cualquier monitoreo/permiso en su lugar, etc.).
Existe un argumento aceptable de que, si en algún momento su Enum se vuelve demasiado complejo, puede reemplazarlo con una jerarquía de clase/clase junto con una enumeración mucho más simple. No estoy seguro de dónde trazar la línea, pero supongo que lo anterior se dirige en esa dirección.
- 1. ¿Por qué Phobos usa enum para constantes?
- 2. ¿Por qué se usa typedef con el tipo enum?
- 3. ¿por qué se usa osgi?
- 4. ¿Por qué se usa suhosin?
- 5. ¿Qué es LiteralControl? ¿Por qué se usa?
- 6. ¿Por qué se usa console.log? ¿Qué hace?
- 7. ¿Por qué Enum.GetValues () devuelve nombres cuando se usa "var"?
- 8. ¿Por qué se usa NSUserDefaults en iOS?
- 9. ¿Por qué md5 todavía se usa ampliamente?
- 10. ¿Por qué no se usa clang más?
- 11. ¿Por qué se usa 1103515245 en rand?
- 12. io_service, ¿por qué y cómo se usa?
- 13. enum anidado en C# y clases
- 14. ¿Por qué utilizar SQL Server bucle anidado
- 15. ¿Para qué se usa + =?
- 16. ¿Por qué se usa gridview: true y qué significa?
- 17. ¿Qué es un "lote" y por qué se usa GO?
- 18. Por qué no podemos tener "enum" enum tipo
- 19. ¿Por qué se lanzaría OutOfMemoryException mientras se usa PLINQ Take()?
- 20. ¿Por qué se abandona el sbt cuando se usa pescado?
- 21. ¿Por qué el cacao no usa el mismo estilo de declaración enum en todas partes?
- 22. ¿Por qué se usa ToArray() cuando se usa cadena.Únete con una lista <string>?
- 23. ¿Por qué ENUM es mejor que INT
- 24. typedef struct y enum, ¿por qué?
- 25. ¿Por qué Android usa Java?
- 26. ¿Por qué Heroku usa Postgresql?
- 27. ¿Por qué HTTP usa TCP?
- 28. ¿Para qué se usa Django?
- 29. ¿Por qué DrawImageUnscaled causa parpadeo cuando se usa desde WM_NCPAINT?
- 30. ¿Cuándo/por qué prefijar variables con "$" cuando se usa jQuery?
Aquí hay un pensamiento: ¿Qué tal un ejemplo de lo que está preguntando? Llámame loco ... –
OK, estás loco (alguien tuvo que hacerlo :)). –
algo así como – mafalda