繁体   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