0

このための詳細または代替アプローチを提供してください。

注意:私はcloneメソッドをオーバーライドしていません。また、cloneメソッドをオーバーライドする必要があるかどうか、およびその利点について誰かが説明してくれれば幸いです。

4

2 に答える 2

2

代わりにコピーコンストラクターを使用できませんか?

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);

これは非常に一般的な方法であり、コピーするプロパティとコピーしないプロパティを手動で決定できるという利点があります。

于 2013-01-31T08:46:32.430 に答える
1

パフォーマンスではなく、クローンのパフォーマンスは問題ありません。ただし、クローンを作成できるのは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
于 2013-01-31T09:12:00.130 に答える