簡體   English   中英

Java:將屬性從Bean復制到另一個

[英]Java: Copy properties from bean to an another one

我有這兩節課:

public class ServiceConfiguration {
    private String id;
    private List<Parameter> parameters;
}

public class ConfigurationUpdateForm {

    @NotEmpty private String id;

    @NotEmpty @Valid private Collection<ConfigurationParameterForm> parameters;
}

我需要將所有屬性從ConfigurationUpdateForm對象復制到ServiceConfiguration對象:

ServiceConfiguration serviceConfiguration = new ServiceConfiguration();
try {
    BeanUtils.copyProperties(serviceConfiguration, configurationForm);
} catch (IllegalAccessException | InvocationTargetException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

但是它不能正確復制parameters集合。

問題出在copyProperties之后, destinationbean.parameters包含ParameterTypeForm列表,而不是Parameter ...

有任何想法嗎?

對於名稱相同的所有情況, BeanUtils.copyProperties(serviceConfiguration, configurationForm)只會將一個類的所有bean屬性復制到另一類。

由於兩個類都包含parameters屬性,因此BeanUtils只會復制該值。

這就是結果中正在發生的事情,突然, ServiceConfiguration中的參數包含一個ConfigurationParameterForm對象的列表。

這是因為復制僅進行了一層,而且在運行時也沒有什么阻止List包含與聲明中指定的對象不同類的對象。

例如:

public class Dog {
    @Override
    public String toString() {
        return "I'm a dog";
    }
}

public class Cat {
    @Override
    public String toString() {
        return "I'm a cat";
    }
}

public static void main(String[] args) {
    List<Dog> dogs = new ArrayList<>();
    dogs.add(new Dog());

    addCat(dogs);

    System.out.println(dogs);
}

public static void addCat(List cats) {
    cats.add(new Cat());
}

運行上面的代碼將導致: [I'm a dog, I'm a cat]

一種可能的解決方案是添加您自己的映射方法,該方法將使用getter和setter從一個類映射到另一個類,但是您還需要從以下映射: ConfigurationParameterFormParameter

暫無
暫無

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

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