java 复制字段_java - 在构造函数中按字段复制字段 - 我需要一个更简洁的形式 - SO中文参考 - www.soinside.com...

你能做的是:

public MyClassExtension(MyClass instance) {

super(...);

new_field = some_value;

}

在创建子类时,最好调用超级构造函数(否则默认情况下将调用默认的超级构造函数)。

为什么这样?因为它限制了重新定义相同初始化所需的次数。例如,当您想要创建具有默认值的对象时。您只在母类中执行一次,并在创建子类时默认调用默认的超级构造函数。您还可以覆盖子类中的默认值,具体取决于您定义类的方式。

这是一个例子:假设你有像这样定义的MyClass:

class MyClass {

protected Object field1;

protected Object field2;

protected Object field3;

public MyClass(MyClass c) {

field1 = c.field1; // Remark: this is only the setup of

field2 = c.field2; // the reference. If you want to create a

field3 = c.field3; // copy, please do so with a constructor.

}

public MyClass(Object field1, Object field2, object field3) {

this.field1 = field1; // Same remark here

this.field2 = field2; // (about references).

this.field3 = field3;

}

}

你在这里看到MyClass定义了2个构造函数:一个所谓的复制构造函数,它将MyClass对象作为参数,构造函数包含所有需要的字段。

然后,当您想要创建一个以MyClass对象作为参数的子类时,您可以这样做:

class MyClassExtension extends MyClass {

private Object newField;

public MyClassExtension(MyClass c, Object newField) {

super(c);

this.newField = newField;

}

}

但你也可以这样做:

class MyClassExtension {

private Object newField;

public MyClassExtension(MyClass c, Object newField) {

super(c.field1, c.field2, c.field3);

this.newField = newField;

}

}

因此,您限制了对MyClass对象参数的访问次数,并且子类MyClassExtension构造函数是简洁的。

请注意,您必须在程序中的某个位置或其他位置提供此代码。您必须为您的编译器定义如何在给定MyClassExtension对象的情况下构建MyClass。要么代码在MyClass,要么在MyClass和MyClassExtension。我只是提供了一种减少代码库的方法,并且如果要更改代码中的任何内容,则限制所需的更改次数。使用此解决方案,如果您更改MyClass构造函数,MyClassExtension也将受到影响(除非您强制执行其他操作)。

另请注意,您需要自己定义复制构造函数,否则编译器将无法知道您是要进行深层复制还是仅仅引用复制。更多信息,请访问http://blog.amitinside.com/Copy-Constructor-in-Java/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值