例如,我有以下实现 Icon 接口(interface)的类。在构造函数中,它通过创建参数中提供的 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;
}
我想知道哪种方式是首选。
最佳答案
让我们先看看它们之间的区别。 当你这样做时,
this.iconColor = new Color(iconColor.getRGB());
正如您所说,您正在制作副本。
当你这样做时,
this.iconColor = iconColor;
您引用的是同一个对象。
<小时/>哪一个是正确的?两者都是正确的。
哪一个更好 ?两者都不。这取决于您的要求。
我什么时候应该使用其中一种而不是另一种?
在以下情况下使用副本:
iconColor
实例状态的更改将使您自己的CircleIcon
实例失效。
在以下情况下使用相同的实例:
iconColor
实例是不可变的。iconColor
实例状态的更改不会对CircleIcon
实例的状态产生任何影响。
关于java - 在构造函数中初始化另一个类的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33061885/