Java 在构造函数中初始化另一个类的对象
例如,我有一个实现Icon接口的类。在构造函数中,它通过创建参数中提供的颜色对象的深度副本来初始化颜色对象Java 在构造函数中初始化另一个类的对象,java,oop,object,constructor,Java,Oop,Object,Constructor,例如,我有一个实现Icon接口的类。在构造函数中,它通过创建参数中提供的颜色对象的深度副本来初始化颜色对象 public class CircleIcon implements Icon { private Color iconColor; private int radius; public CircleIcon(Color iconColor, int radius) { this.iconColor = new
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获取参数中提供的颜色对象的引用,而不是其副本
public CircleIcon(Color iconColor, int radius) {
this.iconColor = iconColor;
this.radius = radius;
}
我想知道哪种方式更可取。在设计角度: 答案是要看情况而定 如果您想授予构造函数调用方访问权,您应该在构造函数中收到该访问权 若不需要调用方提供该对象,则创建自己 那只是设计的问题 在引用透视图中: 说到你的实际问题,当你这么做的时候
this.iconColor = iconColor;
您根本没有创建新的对象,因此它指向您传递的同一个实例。除非您创建新的对象,否则您仍然引用传递的对象。让我们先看看它们之间的区别。 当你这样做的时候
this.iconColor = new Color(iconColor.getRGB());
正如你所说,你正在复印一份。当你这么做的时候
this.iconColor = iconColor;
您指的是同一个对象
哪一个是正确的?两者都是正确的。
哪一个更好?也不这取决于你的要求 什么时候我应该使用一个而不是另一个 在下列情况下使用副本:
- 实例状态的更改将使您自己的类的状态无效李>
- 实例是不可变的李>
- 实例状态的更改不会对类的状态产生任何影响