例如,我有以下类实现Icon接口。在构造函数中,它通过创建参数中提供的Color对象的深层副本来初始化Color对象。
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;
}
我想知道哪种方式更受欢迎。
答案 0 :(得分:1)
从设计角度来看:
答案取决于。
如果要授予构造函数调用者的访问权限,则应在构造函数中接收该函数。
如果不需要调用者来提供该对象,则可以创建自己。
这只是设计问题。
参考视角:
来到你的实际问题,当你这样做
this.iconColor = iconColor;
您根本没有创建 new 对象,因此它指向您传递的同一个实例。除非您创建 new 对象,否则您仍然指的是传递的对象。
答案 1 :(得分:1)
让我们先看看它们之间的区别。 当你这样做时,
this.iconColor = new Color(iconColor.getRGB());
如你所说,你正在制作副本 当你这样做时,
this.iconColor = iconColor;
您指的是同一个对象。
哪一个是正确的?两者都是正确的。
哪个更好?都不是。这取决于您的要求。
我应该何时使用另一个?
何时使用副本
在
时使用相同的实例