簡體   English   中英

通過調用getter和setters進行java bean復制

[英]java bean copy by calling getter and setters

有沒有辦法通過調用它的getter和setter來深度復制2個java對象? 所有的setter和getter都是公共方法。

謝謝,

  1. Java提供clone()來執行淺拷貝,但可以擴展以執行深拷貝。 請閱讀此處了解更多詳情。
  2. 對象序列化技術可以用於相同的。

Commons BeanUtils中的copyProperties(...)可能通過在兩個不同的bean中匹配getter / setter來實現你想要的。

public class Test
{

    public static void main(String[] args) throws IllegalAccessException, InvocationTargetException
    {
        new Test().run();
    }

    private void run() throws IllegalAccessException, InvocationTargetException
    {
        Bean1 one = new Bean1();
        one.setProp1("Foo");

        Bean2 two = new Bean2();

        BeanUtils.copyProperties(two, one);

        System.out.println(ToStringBuilder.reflectionToString(one));
        System.out.println(ToStringBuilder.reflectionToString(two));
    }

    public class Bean1
    {
        private String propbean1;

        public String getProp1()
        {
            System.out.println("bean1 getter");
            return propbean1;
        }

        public void setProp1(String s)
        {
            System.out.println("bean1 setter");
            propbean1 = s;
        }
    }

    public class Bean2
    {
        private String propbean2;

        public String getProp1()
        {
            System.out.println("bean2 getter");
            return propbean2;
        }

        public void setProp1(String s)
        {
            System.out.println("bean2 setter");
            propbean2 = s;
        }
    }
}

版畫

bean1 setter
bean1 getter
bean2 setter
Test$Bean1@1f7d2f0e[propbean1=Foo]
Test$Bean2@539c5048[propbean2=Foo]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM