tags:

views:

418

answers:

1

Can some please explain to me what do

@XmlElementRefs

and

@XmlElementRef

annotations mean in Java and what is their use..

EDIT: @skaffman

okay, suppose I have one such collection

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

List<Object> items;

Now how do I access every individual element of this list? Is the following code 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:
    }
}

Is this correct approach? Is there a better way to perform each class specific processing? I mean is there a way to avoid those if else constructs?

+3  A: 

These are used to annotate a collection which can contain various different types. The java binding for such a list is:

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

Here, items can contain an arbitrary mix of ClassA and ClassB, and since that can't be expressed in List's type signature, it has to be expressed using annotations.

skaffman
okay, suppose I have one such collection@XmlElementRefs({ @XmlElementRef(name="ElementA", type=ClassA), @XmlElementRef(name="ElementB", type=ClassB)})List<Object> items;Now how do I access every individual element of this list? Is the following code 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: } else }
6pack kid
I can't read that. Please add it your question (and format it properly.)
skaffman
But the same also works with @XmlElements and @XmlElement, no?
ewernli
@skaffman how would you set ElementA or B to something?
c0mrade