Инициализация Java-объекта отдельным методом: почему это не сработает - PullRequest
8 голосов
/ 14 августа 2011

Вот вещь, которую я не могу сказать, я удивлен, что это не сработает, но в любом случае мне интересно найти объяснение этого случая.Представьте, что у нас есть объект:

SomeClass someClass = null;

И метод, который примет этот объект в качестве параметра для его инициализации:

public void initialize(SomeClass someClass) {
  someClass = new SomeClass();
}

И затем, когда мы вызовем:

initialize(someClass);
System.out.println("" + someClass);

Будет напечатано:

null

Спасибо за ваши ответы!

Ответы [ 3 ]

10 голосов
/ 14 августа 2011

Невозможно сделать в Java. В C # вы передаете параметр, используя ключевое слово ref или out. В Java нет таких ключевых слов. Вы можете увидеть этот вопрос для деталей: Могу ли я передать параметры по ссылке в Java?

Кстати, по этой же причине вы не можете написать в Java функцию подкачки, которая бы поменяла местами два целых числа.

1 голос
/ 14 августа 2011

Как уже упоминал Армен, то, что вы хотите сделать, таким образом невозможно.Почему бы не использовать фабричный метод?

0 голосов
/ 14 августа 2011

И метод, который примет этот объект в качестве параметра для его инициализации:

Метод не принимает объект в качестве параметра в вашем случае. Требуется ссылка, которая указывает на ноль. Затем он копирует эту ссылку и указывает на новый экземпляр SomeClass. Но очевидно, что ссылка, которую вы передали в качестве параметра, по-прежнему указывает на null .

...