首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用私有属性复制构造函数

使用私有属性复制构造函数
EN

Stack Overflow用户
提问于 2010-03-12 02:23:26
回答 2查看 555关注 0票数 4

这里是我的第一个问题,所以要温柔点。

我想要以下代码的参数:

代码语言:javascript
复制
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;
    }

    ...
}

我认为这破坏了传递给复制构造函数的实例的模块性。这是我认为是正确的:

代码语言:javascript
复制
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方法会导致不必要的开销。

我站在十字路口。你能说点什么吗?

EN

回答 2

Stack Overflow用户

发布于 2010-03-12 02:35:22

访问是基于类的,而不是基于对象的。

将成员设为私有的基本原理是,其他类不应该知道定义良好的API之外的实现细节,以便让系统的其余部分容忍实现的更改。然而,拷贝构造函数不是“系统的第一个”--它是你自己的类。

票数 1
EN

Stack Overflow用户

发布于 2010-03-12 02:35:28

第一个示例不是复制实例的私有属性,因为它们是同一个类的bot实例。

然而,如果你添加了访问方法/属性,任何优秀的编译器都应该将它们优化为简单的“内联”,在这种情况下,第二个方法是更干净的代码(所有访问都通过你的访问函数进行),但这两种方法都应该是同样有效(可能相同)的成员副本。

如果你真的想要一个拷贝构造函数是有效的,那么一个较低级别的二进制拷贝会比一个成员级拷贝快。但明显“更脏”。

一般来说,我更喜欢通过属性/访问器访问所有成员字段,因为这样可以更好地封装它们,允许您更改字段的底层实现/存储,而不必更改访问它的任何代码,除了属性/访问器本身。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2427563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档