2015-10-11 3 views
1

Например, у меня есть следующий класс, который реализует интерфейс Icon. В конструкторе он инициализирует объект «Цвет», создавая глубокую копию объекта «Цвет», заданного в параметре.Инициализировать объект другого класса в конструкторе

public class CircleIcon implements Icon { 
     private Color iconColor; 
     private int radius; 

     public CircleIcon(Color iconColor, int radius) { 
      this.iconColor = new Color(iconColor.getRGB()); 
      this.radius = radius; 
     } 
    } 

Мой вопрос: это правильный способ инициализации объекта другого класса? Я часто вижу подобные вещи в коде других людей. Здесь this.iconColor получает ссылку на объект Color, указанный в параметре вместо его копии.

public CircleIcon(Color iconColor, int radius) { 
     this.iconColor = iconColor; 
     this.radius = radius; 
} 

Я хотел бы знать, какой путь является предпочтительным.

ответ

1

Давайте сначала увидим разницу между ними. Когда вы делаете,

this.iconColor = new Color(iconColor.getRGB()); 

Вы делаете копию, как вы сказали.
И когда вы это делаете,

this.iconColor = iconColor; 

Вы имеете в виду тот же объект.


Какой? Оба правильные.
Какой из них лучше? Ни. Это зависит от ваших требований.

Когда я должен использовать один над другим?

Используйте копию, когда

  • Изменения состояния экземпляра аннулирует собственное состояние класса.

Используйте тот же самый случай, когда,

  • Экземпляр неизменна.
  • Изменения состояния экземпляра не повлияют на состояние вашего класса.
1

В точки зрения дизайна:

Ответ зависит.

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

Если вызывающий объект не нужен для обеспечения этого объекта, вы создаете себя.

Это просто материя дизайна.

В опорной точки зрения:

Coming на ваш реальный вопрос, когда вы делаете это

this.iconColor = iconColor; 

Вы вовсе не создавая новый объект, поэтому он указывает на то же, например, вы прошло. Если вы не создали новый объект, вы все еще имеете в виду переданный объект.

+0

Я думаю, что вы поняли вопрос неправильно. Вопрос в том, должен ли он сделать копию объекта или если он может просто поддерживать ссылку на него. –

+0

@MohammadGhazanfar отредактировал :) Спасибо за указание. –

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