java 如何将一个对象转换成另一个对象
1. 使用构造函数
如果目标类有从源对象构造新实例的构造函数,可以直接使用构造函数进行转换。
// 源对象
public class Source {
private String name;
private String code;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
}
// 目标类
public class Target {
private String name;
private Integer num;
public Target(Source source) {
// 转换逻辑
this.name = source.getName();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getNum() {
return num;
}
public void setNum(Integer num) {
this.num = num;
}
}
// 测试类
public class Test1 {
public static void main(String[] args) {
constructionMethod();
}
public static void constructionMethod(){
Source source = new Source();
source.setName("11");
source.setCode("22");
Target target = new Target(source);
System.out.println(target.getName());
}
}
2. 类型转换
如果两个类具有继承关系,可以直接进行类型转换。
// 父类
public class Source {
private String name;
private String code;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
}
// 子类
public class Source1 extends Source{
private String type;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
// 测试类
public class Test1 {
public static void main(String[] args) {
typeChange();
}
public static void typeChange(){
Source source = new Source1();
source.setName("11");
source.setCode("22");
Source1 source1 = (Source1) source;
System.out.println(source1.getName());
System.out.println(source1.getCode());
System.out.println(source1.getType());
}
}
3. 使用方法
有些时候可以调用目标类的方法将源对象转换为目标对象。
// 源对象
public class Source {
private String name;
private String code;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
}
// 目标对象
public class Target {
private String name;
private Integer num;
public static Target convert(Source source) {
Target target = new Target();
// 转换逻辑
target.setName(source.getName());
return target;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getNum() {
return num;
}
public void setNum(Integer num) {
this.num = num;
}
}
// 测试类
public class Test1 {
public static void main(String[] args) {
convert();
}
public static void convert(){
Source source = new Source();
source.setName("11");
source.setCode("22");
Target target = Target.convert(source);
System.out.println(target.getName());
}
}
4. 使用工厂方法或构建器
如果转换过程复杂,可以使用专门的转换类或方法来封装转换逻辑。
// 源对象
public class Source {
private String name;
private String code;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
}
// 目标类
public class Target {
private String name;
private Integer num;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getNum() {
return num;
}
public void setNum(Integer num) {
this.num = num;
}
}
// 转换类
public class Converter {
public static Target convert(Source source) {
Target target = new Target();
// 转换逻辑
target.setName(source.getName());
return target;
}
}
// 测试类
public class Test1 {
public static void main(String[] args) {
convert();
}
public static void convert(){
Source source = new Source();
source.setName("11");
source.setCode("22");
Target target = Converter.convert(source);
System.out.println(target.getName());
}
}
5. 使用自定义转换器
对于复杂的对象转换,可以使用像 Dozer 或 ModelMapper 这样的转换框架。
- 导入Dozer的依赖和配置
<dependency>
<groupId>net.sf.dozer</groupId>
<artifactId>dozer</artifactId>
<version>5.5.1</version>
</dependency>
// 假设已有Dozer的依赖和配置
Mapper mapper = DozerBeanMapperBuilder.buildDefault();
class Source {
// ...
}
class Target {
// ...
}
Source source = new Source();
Target target = mapper.map(source, Target.class); //第一个参数是源对象,第二个参数是目标对象
原文地址:https://blog.csdn.net/xiaotiaoza/article/details/138223587
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!