这里是我的第一个问题,所以要温柔点。
我想要以下代码的参数:
public class Example {
private String name;
private int age;
...
// copy constructor here
public Example(Example e) {
this.name = e.name; // accessing a private attribute of an instance
this.age = e.age;
}
...
}我认为这破坏了传递给复制构造函数的实例的模块性。这是我认为是正确的:
public class Example {
private String name;
private int age;
...
// copy constructor here
public Example(Example e) {
this.setName(e.getName());
this.setAge(e.getAge());
}
...
}一位朋友公开了一个有效的观点,他说在复制构造中,我们应该尽可能快地创建对象。添加getter/setter方法会导致不必要的开销。
我站在十字路口。你能说点什么吗?
发布于 2010-03-12 02:35:22
访问是基于类的,而不是基于对象的。
将成员设为私有的基本原理是,其他类不应该知道定义良好的API之外的实现细节,以便让系统的其余部分容忍实现的更改。然而,拷贝构造函数不是“系统的第一个”--它是你自己的类。
发布于 2010-03-12 02:35:28
第一个示例不是复制实例的私有属性,因为它们是同一个类的bot实例。
然而,如果你添加了访问方法/属性,任何优秀的编译器都应该将它们优化为简单的“内联”,在这种情况下,第二个方法是更干净的代码(所有访问都通过你的访问函数进行),但这两种方法都应该是同样有效(可能相同)的成员副本。
如果你真的想要一个拷贝构造函数是有效的,那么一个较低级别的二进制拷贝会比一个成员级拷贝快。但明显“更脏”。
一般来说,我更喜欢通过属性/访问器访问所有成员字段,因为这样可以更好地封装它们,允许您更改字段的底层实现/存储,而不必更改访问它的任何代码,除了属性/访问器本身。
https://stackoverflow.com/questions/2427563
复制相似问题