2010-01-27 3 views
13

Można niektóre proszę wyjaśnić mi, co zrobić@XmlElementRefs & @XmlElementRef adnotacje w Javie

@XmlElementRefs 

i

@XmlElementRef 

adnotacje znaczy w języku Java i jakie jest ich zastosowanie ..

EDYTOWANIE: @skaffman

dobrze, załóżmy, mam jeden taki zbiór

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

List<Object> items; 

Teraz jak mam dostęp do każdego indywidualnego elementu tej liście? Czy poniższy kod jest prawidłowy?

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

Czy to prawidłowe podejście? Czy istnieje lepszy sposób wykonywania każdego przetwarzania specyficznego dla klasy? Chodzi mi o to jest sposób na uniknięcie tych konstruktów if else?

+0

Zwykle używa się tego z polimorfizmem. ClassA i ClassB rozszerzają zarówno klasę ClassBase, dzięki czemu nie potrzebujesz, aby/else poprawnie przetwarzał przetwarzanie. – ewernli

Odpowiedz

6

Są one używane do opisywania kolekcji, która może zawierać różne typy. Wiązanie na takiej liście Java jest:

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

Tutaj items może zawierać dowolną mieszankę ClassA i ClassB, a ponieważ nie mogą być wyrażone w rodzaju podpisu List „s, to musi być wyrażone za pomocą adnotacje.

+0

porządku, załóżmy mam jedno takie zbiórki @XmlElementRefs ({ @XmlElementRef (name = "elementa" type = ClassA), @XmlElementRef (name = "ElementB" type = ClassB) }) Lista przedmiotów; Teraz, jak uzyskać dostęp do każdego elementu tej listy? Czy poniższy kod jest prawidłowy? dla (int j = 0; j

+0

Nie mogę tego przeczytać. Dodaj to swoje pytanie (i sformatuj je poprawnie). – skaffman

+0

Ale to samo działa z @XmlElements i @XmlElement, nie? – ewernli