2017-02-13 10 views
-2

Что такое принципиальное различие между рядом с записями:В чем разница между созданием экземпляра и его передачей в качестве параметров и экземпляром создания внутри параметров?

и

User user = new User(new Database(config)); 

Правильно ли я понимаю, что вторая одна только короткая форма первого и может быть использован, когда я не планирую позвонить любым database методам?

ответ

2

Для большинства целей действительно нет большой разницы. Есть несколько отличий, хотя:

  1. В первом случае, вы можете получить доступ к этому Database экземпляру через переменную database, в то время как во втором, вы должны получить его из экземпляра User что user ссылки в чтобы делать что-либо прямо. Это, очевидно, не имеет значения, если вы просто строите User с Database, а затем ничего не делаете с ним напрямую.

  2. Если User экземпляр, user ссылки больше не имеет ссылку на Database объект по каким-либо причинам (например, он использовал его только в его конструктор, или какой-то другой вызов сделал это установить переменную-член, который со ссылкой на него в null), и database все еще существует, то ссылка на этот объект Database все еще существует в программе, и GC не может его собрать. Это в основном проблема, если вы делаете что-то вроде создания отдельных переменных-членов для каждого объекта, вместо использования локальных переменных или если вы передаете объекты по отдельности, и если вы не собираетесь напрямую обращаться к Database, то это на самом деле не имеет смысла иметь отдельную переменную-член для нее или передать ее.

Таким образом, на самом деле, только различия должны делать с последствиями наличия отдельной ссылки на Database, и если все, что вы делаете с Database строят User, то имея database переменного совершенно ненужным.

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

  • Нет связанных вопросов^_^