Как составить список собственных векторных элементов?

У меня есть собственный vector.class и polygon.class Vector.class

package org.onvif.ver10.schema;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlType;

@XmlAccessorType(XmlAccessType.FIELD)

@XmlType(name = "Vector")

public class Vector {

    @XmlAttribute(name = "x")
    protected Float x;
    @XmlAttribute(name = "y")
    protected Float y;

    /**
     * Gets the value of the x property.
     * 
     * @return
     *     possible object is
     *     {@link Float }
     *     
     */
    public Float getX() {
        return x;
    }

    /**
     * Sets the value of the x property.
     * 
     * @param value
     *     allowed object is
     *     {@link Float }
     *     
     */
    public void setX(Float value) {
        this.x = value;
    }

    /**
     * Gets the value of the y property.
     * 
     * @return
     *     possible object is
     *     {@link Float }
     *     
     */
    public Float getY() {
        return y;
    }

    /**
     * Sets the value of the y property.
     * 
     * @param value
     *     allowed object is
     *     {@link Float }
     *     
     */
    public void setY(Float value) {
        this.y = value;
    }
    }

и класс полигонов

public class Polygon {

@XmlElement(name = "Point", required = true)
protected List<Vector> point;

/**
 * Gets the value of the point property.
 * 
 * <p>
 * This accessor method returns a reference to the live list,
 * not a snapshot. Therefore any modification you make to the
 * returned list will be present inside the JAXB object.
 * This is why there is not a <CODE>set</CODE> method for the point property.
 * 
 * <p>
 * For example, to add a new item, do as follows:
 * <pre>
 *    getPoint().add(newItem);
 * </pre>
 * 
 * 
 * <p>
 * Objects of the following type(s) are allowed in the list
 * {@link Vector }
 * 
 * 
 */
public List<Vector> getPoint() {
    if (point == null) {
        point = new ArrayList<Vector>();
    }
    return this.point;
}

}

Итак, я даю элементы вектора:

org.onvif.ver10.schema.Vector MyVector = new Vector(); // létrehozzuk az
                                                                // onvif féle
                                                                // vector-t
        org.onvif.ver10.schema.Polygon op = new org.onvif.ver10.schema.Polygon();

        for (int i = 1; i <= p.npoints; i++) {
//          IJ.log("X: "+ i);
//          MyVector.setX((float) p.xpoints[i]); // hozzáadjuk az elemet
//          MyVector.setY((float) p.ypoints[i]);

            MyVector.setX((float)p.xpoints[i-1]);
            op.getPoint().add(MyVector);
            IJ.log("Vector X Elements "+i+" :"+ MyVector.getX());

        }
        IJ.log("Op size " + op.getPoint().size());

Мой вопрос: как я могу получить элементы op (onvif polygon)? Потому что, как бы я ни старался, я получил последний элемент 10 раз.

1 ответ

Решение

Ваша ошибка в том, что вы добавляете то же самое Vector Экземпляр в многоугольник 10 раз и установка точек на этом одном экземпляре снова и снова.

Ваш код должен быть изменен, чтобы переместить new Vector() строка внутри цикла:

    org.onvif.ver10.schema.Polygon op = new org.onvif.ver10.schema.Polygon();

    for (int i = 1; i <= p.npoints; i++) {
        org.onvif.ver10.schema.Vector MyVector = new Vector(); 
        MyVector.setX((float)p.xpoints[i-1]);
        op.getPoint().add(MyVector);
        IJ.log("Vector X Elements "+i+" :"+ MyVector.getX());

    }

Проблемы со стилем вашего кода включают, но не ограничиваются:

  • Имена переменных должны начинаться со строчной буквы, поэтому myVector не MyVector
  • Никогда не создавайте имена классов, синонимичные с классами JDK (например, Vector)
Другие вопросы по тегам