2010-01-27 4 views
13

Quelqu'un peut me expliquer s'il vous plaît ce faire@XmlElementRefs et annotations @XmlElementRef en Java

@XmlElementRefs 

et

@XmlElementRef 

annotations signifient en Java et quel est leur utilisation ..

EDIT: @skaffman

bien, supposons que j'ai une telle collection

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

List<Object> items; 

Maintenant, comment puis-je accéder à chaque élément individuel de cette liste? Le code suivant est-il correct?

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: 
    } 
} 

Est-ce la bonne approche? Existe-t-il une meilleure façon d'effectuer chaque traitement spécifique à une classe? Je veux dire est-il un moyen d'éviter ces if else constructions?

+0

Vous utilisez généralement ceci avec le polymorphisme. ClassA et ClassB étendent ClassBase, donc vous n'avez pas besoin de if/else pour distribuer correctement le traitement. – ewernli

Répondre

6

Elles servent à annoter une collection pouvant contenir différents types différents. La java de liaison pour une telle liste est la suivante:

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

Ici, items peut contenir un mélange arbitraire de ClassA et ClassB, et puisque ce ne peut être exprimé dans la signature de type de List, il doit être exprimé à l'aide annotations.

+0

bien, supposons que j'ai une telle collection @XmlElementRefs ({ @XmlElementRef (name = "ELEMENTA", type = ClassA), @XmlElementRef (name = "ElementB", type = ClassB) }) Liste articles; Maintenant, comment puis-je accéder à chaque élément de cette liste? Le code suivant est-il correct? pour (int j = 0; j

+0

Je ne peux pas lire. S'il vous plaît ajouter votre question (et le formater correctement.) – skaffman

+0

Mais la même chose fonctionne aussi avec @XmlElements et @XmlElement, non? – ewernli