Java работает по ссылкам, поэтому объект Waypoint
, если он явно не клонирован, будет таким же.
Если вы сохраните ссылку на него, вы можете легко изменить его значения, отражая их в одном и том жеобъект, содержащийся в списке, просто потому, что они оба ссылаются на один и тот же экземпляр.
Это покажет нужное вам поведение:
static class Pair
{
int x,y;
public Pair(int x, int y) { this.x = x; this.y = y; }
}
public static void main(String[] args)
{
java.util.ArrayList<Pair> pairs = new java.util.ArrayList<Pair>();
Pair p = new Pair(0,0);
pairs.add(p);
p.x = 20; p.y = 40;
System.out.println(pairs.get(0).x+" "+pairs.get(0).y);
}
Вы увидите, что вывод равен "20 40"
каквы ожидаете.
Если вы хотите сгенерировать новую путевую точку из той, с которой вы начинаете, вам следует определить свой собственный метод и явно дублировать объект.
Выполнение
list.add(p);
// modify p
list.add(p);
просто вставит один и тот же элемент дважды, а это не то, что вы ищете.Вместо этого:
list.add(p);
Waypoint p2 = p.duplicate();
list.add(p2);
вставит два разных объекта (при условии, что duplicate
фактически создает другой объект с new
)