2016-10-15 3 views
0

У меня есть два класса: сетка и робот. И я призываю:Изменение объекта, помещенного в параметр конструктора другого класса несколько раз

Grid g = new Grid(5,5); 
Robot a = new Robot(1, 1, g); 
Robot b = new Robot(2, 2, g); 

бы можно было бы для меня, чтобы разделить г между двумя классами роботов так, что изменение г, используя метод, называемый на Robot а, будет также изменить Robot б таким же образом?
Или есть другой способ сделать это?

+0

Это прекрасно, однако вам нужно быть осторожным, чтобы доступ к 'g' был синхронизирован. Чтобы метод 'g' влиял на« робот », вам нужно сообщить' g' о роботах. Возможно, вам стоит подумать о том, чтобы сделать что-то большее: «Grid g = ..; Робот a = новый робот (1, 1); g.addRobot (а); ... '(если конструктор' Robot' не вызывает какой-либо метод на 'g', чтобы сообщить ему о существовании робота) – Tibrogargan

+0

Робот a и b получили две разные ссылки на объект g, но эта две контрольные точки - тот же g-объект. Но поскольку @Tibrogargan говорит, что вам следует внимательно следить за объектом g в многопоточной среде. – seal

+1

@seal Java pass-by-value, поэтому они получают одну и ту же ссылку (передается * значение * ссылки, а не ссылка на объект 'Grid') – Tibrogargan

ответ

1

Поскольку Java передается по значению, когда вы передаете ссылку в качестве аргумента методу, вы передаете его значение, которое является адресом памяти, и, как следствие, вы получаете ссылку на объект в этом методе.
Итак, ваш код работает так, как вы ожидаете.
Вы можете проверить его, изменив значение Grid g в некоторых роботах и ​​зарегистрировав другого робота, если он изменился.
Для получения дополнительной информации о пропуске можно прочитать here.

Надеюсь, это поможет.

Смежные вопросы