A veces incluso puede que no sepa que el entorno en el que conecta el código tiene más de un cargador de clases. ¿Puedo esperar que la operación "==" funcione en valores enum en este caso?enum vs. cargadores de clases
Respuesta
"=="
no funciona, pero desea utilizar .equals()
de todos modos.
que podría estar interesado en el apache commons clase lang: link text
múltiples cargadores de clases no puede ser el problema, siempre y cuando la enumeración sólo está disponible a través de uno de ellos. Si ese no es el caso, perderá todos los beneficios de una enumeración.
Y por cierto, usar equals()
tampoco ayuda. Aquí está la implementación de Enum.equals(Object)
en Java 1.6:
public final boolean equals(Object other) {
return this==other;
}
Lo mismo aquí que en la publicación de josefx; aún puede funcionar cuando varios cargadores de clases cargan una enumeración, solo debe tener cuidado de que estén aislados el uno del otro. –
Claro, pero es un dolor. Rompe cualquier suposición que uno tenga sobre las enumeraciones. Y rompe el patrón enum Singleton. –
Los cargadores de clases rompen todos los patrones de singleton. – josefx
Si la clase de enumeración sólo se carga una vez que seguirá funcionando.
- su enumeración es únicamente de uso el plugin cargado
- la enumeración se ha cargado por un cargador de clases padre de los cargadores de clases de plugin individuales
Si la clase de enumeración es cargado por diferentes cargadores de clases se no funcionará
- usted pasa los valores enum entre los diferentes plugins pero la aplicación cla ssloader no ha cargado la enumeración. (Ésta puede funcionar si los valores de enumeración nunca se cruzan entre plugins)
La razón por la que es de esta manera
Java utiliza instancias de objetos para representar los diferentes valores de enumeración, cada uno de estos casos se almacena como un campo estático dentro de la clase enum. Si la enumeración se carga dos veces, cada valor enum se representa con dos instancias de objetos diferentes. El == operator
solo compara las referencias y no tiene conocimiento de las múltiples instancias que representan un valor enum, por lo que no coincidirá con los valores cargados por diferentes cargadores de clases.
"El operador == solo compara las referencias" suena un poco como un dogma. Enum ya es algo muy especial. Una especialidad más podría definir "==" como "this.ordinal() == that.ordinal()". ¿Podría eso resolver el problema? – Dima
@Dima, siempre que ambas definiciones cargadas de la enumeración sean idénticas, funcionará. El valor ordinal solo contiene el índice (posición) de la constante Enum en el código fuente, si el código cambia (valores nuevos, ordenamiento diferente) aún se rompería. Si la velocidad no es un problema, puede comparar sus nombres. – josefx
- 1. cargadores de clases Scala confusión
- 2. ClassCastException debido a cargadores de clases?
- 3. Enum vs Enum fuertemente tipada
- 4. Enum vs Lookup table vs Enum reflection vs State pattern
- 5. Ahorro de espacio PermGen con varios cargadores de clases
- 6. Java: Enum vs. Int
- 7. Usando enum vs Boolean?
- 8. EnumMap vs Enum valores
- 9. ¿Cuándo participan los cargadores de clase Java?
- 10. javax.xml.bind.DatatypeConverter cargadores de clase con fugas?
- 11. const vs enum en D
- 12. Enum serialización JSON vs XML
- 13. Cargadores en Android Honeycomb
- 14. Múltiples clases Enum en un archivo Java
- 15. enum anidado en C# y clases
- 16. Equivalente de cargadores de clase en .NET
- 17. ¿Por qué solo veo cargadores de clases "muertos" de jmap -permstat (excepto el programa de arranque)?
- 18. Módulos NodeJS vs clases
- 19. Interfaces vs. clases abstractas
- 20. Orden de Tomcat cargadores de clases: común y compartido, y el servidor
- 21. ¿Cómo usar cargadores de clases separados y ejecutar en la misma JVM? (OSGI)
- 22. Android: enum vs static final ints?
- 23. Enum vs no miembros discriminado unión
- 24. tipo MySQL ENUM vs unir tablas
- 25. C: enum VS #define para constantes matemáticas?
- 26. Clases de estilo Java-enum en Objective-C?
- 27. Asignación de clases enum personalizadas con Fluent Nhibernate
- 28. Estructuras vs clases en C++
- 29. Clases internas: Android vs Java
- 30. Comandos de acción vs clases de acción?
La pregunta es: would 'equals()' work? –
BTW, implementación de Enum 'equals()' solo llama a 'this == other' (Sun/Oracle JDK 6). –
sí, como acabo de escribir en mi propia respuesta –