2010-01-27 29 views
13

Puede alguien por favor me explique lo hacen@XmlElementRefs y @XmlElementRef anotaciones en Java

@XmlElementRefs 

y

@XmlElementRef 

anotaciones significan en Java y cuál es su uso ..

EDITAR: @skaffman

bien, supongamos que tengo una colección de tales

@XmlElementRefs({ 
    @XmlElementRef(name="ElementA", type=ClassA), 
    @XmlElementRef(name="ElementB", type=ClassB) } 
) 

List<Object> items; 

Ahora, ¿cómo puedo acceder a cada elemento individual de esta lista? Es el siguiente código correcto?

for (int j = 0; j < items.size(); ++j) { 
    if (items.get(i).getClass().equals(ClassA)) { 
     // perform ClassA specific processing: 
    } else if (items.get(i).getClass().equals(ClassB)) { 
     // perform ClassB specific processing: 
    } 
} 

¿Es este el enfoque correcto? ¿Hay una mejor manera de realizar cada procesamiento específico de clase? Quiero decir, ¿hay alguna manera de evitar esos constructos if else?

+0

Suele usar esto con polimorfismo. ClassA y ClassB ambos amplían ClassBase, por lo que no necesita if/else para enviar correctamente el procesamiento. – ewernli

Respuesta

6

Se utilizan para anotar una colección que puede contener varios tipos diferentes. La unión para una lista tal Java es:

@XmlElementRefs({ 
    @XmlElementRef(name="ElementA", type=ClassA), 
    @XmlElementRef(name="ElementB", type=ClassB) 
}) 
List<Object> items 

Aquí, items puede contener una mezcla arbitraria de ClassA y ClassB, y puesto que no puede ser expresado en el tipo de firma List 's, que tiene que ser expresado usando anotaciones

+0

bien, supongamos que tengo una recogida de tales @XmlElementRefs ({ @XmlElementRef (name = "elementa", type = claseA), @XmlElementRef (name = "elementb", type = ClassB) }) Lista artículos; Ahora, ¿cómo puedo acceder a cada elemento individual de esta lista? Es el siguiente código correcto? for (int j = 0; j

+0

no puedo leer eso. Agregue su pregunta (y formatéela correctamente) – skaffman

+0

Pero lo mismo también funciona con @XmlElements y @XmlElement, ¿no? – ewernli