Estoy creando una biblioteca Java para un cliente, y una de las cosas que ellos quieren es una representación de datos de un conjunto particular de estándares con los que trabajan. No quiero revelar los intereses de mi cliente, pero si fuera un alquimista, él puede ser que desee el siguiente:¿Cómo construir una estructura de datos compleja, jerárquica e inmutable en Java?
Elements
Fire
Name="Fire"
Physical
Temperature=451
Color="Orange"
Magical
Domain="Strength"
Water
Name="Water"
Physical
Color="Blue"
Earth
Name="Earth"
Magical
Domain="Stability"
Ordinality=1
tengo que ser capaz de acceder a varios elementos de datos por su nombre, como por ejemplo:
Elements.Earth.Name
Elements.Water.Physical.Color
que también tienen que ser capaces de recorrer atributos, como:
for (MagicalType attrib : Elements.Fire.Magical)
{
...
}
hecho, me han sido capaces de crear esta estructura de datos, y puedo hacer todo lo que he pedido anteriormente - aunque tuve que crear matrices separadas para la iteración, así que realmente lo que hago se parece más a:
for (MagicalType attrib : Elements.Fire.MagicalAuxArray)
Lamentablemente no he podido cumplir mi último requisito: toda la estructura de datos debe ser inmutable. Lo he intentado repetidamente, y busqué en la web buscando ejemplos, pero hasta ahora no he podido lograr esto de manera razonable. Tenga en cuenta que la estructura de datos final será bastante grande; Realmente espero evitar una solución demasiado repetitiva o crear demasiados símbolos públicos.
Soy un programador muy experimentado, con menos experiencia con Java. ¿Alguien puede sugerirme cómo puedo representar los datos anteriores para cumplir todos mis requisitos?
+1 Para el ejemplo de la alquimia. Bienvenido a SO! – NullUserException