このための詳細または代替アプローチを提供してください。
注意:私はcloneメソッドをオーバーライドしていません。また、cloneメソッドをオーバーライドする必要があるかどうか、およびその利点について誰かが説明してくれれば幸いです。
このための詳細または代替アプローチを提供してください。
注意:私はcloneメソッドをオーバーライドしていません。また、cloneメソッドをオーバーライドする必要があるかどうか、およびその利点について誰かが説明してくれれば幸いです。
代わりにコピーコンストラクターを使用できませんか?
public class User {
private String firstname;
private String lastname;
// 0-arg constructor
public User() {
}
// classic constructor
public User(String firstname, String lastname) {
this.firstname = firstname;
this.lastname = lastname;
}
// copy constructor
public User(User copy) {
firstname = copy.getFirstname();
lastname = copy.getLastname();
}
// accessors omitted
}
次に、次のように使用できます。
User johnDoe = new User("john", "doe");
User copy = new User(johnDoe);
これは非常に一般的な方法であり、コピーするプロパティとコピーしないプロパティを手動で決定できるという利点があります。
パフォーマンスではなく、クローンのパフォーマンスは問題ありません。ただし、クローンを作成できるのはCloneableオブジェクトのみですが、SpringのBeanUtils.copyPropertiesは任意のJavaBeanオブジェクトのプロパティをコピーできます(プロパティのパブリックno-argsコンストラクターおよびsetter / getters)。たとえば、これは異なるクラスの2つのオブジェクトのプロパティをうまくコピーします
class X {
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
class Y {
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class Test1 {
public static void main(String[] args) throws Exception {
X x = new X();
x.setName("test");
Y y = new Y();
BeanUtils.copyProperties(x, y);
System.out.println(y.getName());
}
}
とプリント
test