[英]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從一個類映射到另一個類,但是您還需要從以下映射: ConfigurationParameterForm
到Parameter
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.