Как изменить ссылочный указатель на другой объект - PullRequest
0 голосов
/ 21 января 2019

Я читал введение в java книгу (Core Java SE 9, не то, чтобы это важно) и упоминалось, что вы не можете написать метод, который изменяет ссылку на объект на что-то другое.

Код, который они предоставили в качестве примера того, что не работает, выглядит следующим образом. Мой вопрос заключается в том, какую альтернативу я мог бы использовать, если бы хотел добиться тех же результатов.

public class EvilManager {
...
   public void replaceWithZombie(Employee e) {
     e = new Employee("", 0);
   }
}

извините, возможно, я облажался с точной номенклатурой, я новичок, но я стараюсь

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Это присвоение действительно изменяет значение параметра e, но только в пределах метода. Это не имеет никакого влияния на фактический параметр. Это потому, что Java использует вызов по значению.

Однако вы можете изменить сам объект (если он изменчив), и это изменение будет видно снаружи. Что-то вроде:

e.setName("abc");
0 голосов
/ 21 января 2019

Вы можете взять объект на уровне класса.

public class EvilManager {
   private Employee emp; // reference to it can be changed from anywhere within the class (or even outside if you change access modifier)

   public void initEmployee() {
      emp = new Employee("1", 0);
   }

   public void replaceWithZombie(Employee e) {
      emp = new Employee("2", 0); // reference changed
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...