Я бы просто передал Объект на панель, затем изменил объект в
панель, изменит значение объекта в основной программе как
Что ж. С примитивными типами, такими как Boolean и int, фактическое значение
передается в Panel, а не в качестве ссылки и, таким образом, изменяя эти
Значения на панели не влияют на остальную часть программы.
Это неправильно . В Java все передается как копия ссылки . Это как раз тот случай, когда ссылка календаря указывает на объект, а также на копию этой ссылки, поэтому изменение значения ссылочной ссылки делает то, что вы хотите.
Но если у вас есть пользователь с User.name (String) и User.age (int), и вы, например, изменили их с помощью JTextField, у вас возникла та же проблема, в то время как String не является примитивом. Строки являются неизменяемыми, поэтому вы можете просто изменить строку, на которую указывает ссылка, но, поскольку то, что вы передаете, является копией, исходный объект не затрагивается.
// Invokes your Panel with a new copy of the string reference
StringPropPanel ppun = new StringPropPanel (user.name);
// Invokes your Panel with a new copy of the int reference
IntPropPanel ppua = new IntPropPanel (user.age);
// Invokes your Panel with a new copy of a User reference
IntPropPanel ppup = new IntPropPanel (user.parent);
Последнее будет работать - но поднимите вопрос, как создать такую панель из пользователя.
PropPanel ppun = new PropPanel (user.name) {
public void update () {
user.setName (textfield.getText ());
}
}
PropPanel ppun = new PropPanel (user.age) {
public void update () {
user.setAge (Integer.parseInt (textfield.getText ()));
}
}
С абстрактным методом update
, который запускается однозначно и может быть переопределен анонимными реализациями ad-hoc, вы можете добиться большего успеха.