栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java多态的一种思考与实现

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java多态的一种思考与实现

接到一个需求,Java后台接到前台的请求后,要转为另一个格式存储,具体如下

前台的请求:

[{"id":"1","name":"张三"},{"id":"2","name":"李四"},{"id":"3","name":"王五"}]

转为另一个格式存到数据库:(不要问为什么,问就是历史原因,而且要保持这种顺序 0...0)

[{"id":"1","name":"张三"},{"name":"李四","id":"2"},{"name":"王五","id":"3"}]

首先解析前台的请求,新建一个PersonDto来映射请求的字段

@Data
public class PersonDto implements Serializable {
    String id;
    String name;
}

实现类:(省略main方法) 

String request = "[{"id":"1","name":"张三"},{"id":"2","name":"李四"},{"id":"3","name":"王五"}]";
ObjectMapper mapper = new ObjectMapper();
List personDtoList = mapper.readValue(request, new TypeReference>() {});
for (PersonDto personDto : personDtoList) {
    System.out.println("["personDto"] = " + personDto);
}

代码输出结果如下:

["personDto"] = PersonDto(id=1, name=张三)
["personDto"] = PersonDto(id=2, name=李四)
["personDto"] = PersonDto(id=3, name=王五)

 但是问题来了:如果我直接输出,就达不到需求的结果

String response = mapper.writeValueAsString(personDtoList);
System.out.println("["response"] = " + response);

结果输出: 

["response"] = [{"id":"1","name":"张三"},{"id":"2","name":"李四"},{"id":"3","name":"王五"}]

后面思考了一段时间,为啥不适用多态试一下呢?

创建ResponseDto类

@Data
public class ResponseDto implements Serializable {
}

创建子类(正序子类)

@EqualsAndHashCode(callSuper = true)
@Data
public class ResponseAscDto extends ResponseDto{
    String id;
    String name;
}

创建子类(逆序子类)

@EqualsAndHashCode(callSuper = true)
@Data
public class ResponseDescDto extends ResponseDto{
    String name;
    String id;
}

实现类:(省略main方法)

String request = "[{"id":"1","name":"张三"},{"id":"2","name":"李四"},{"id":"3","name":"王五"}]";
ObjectMapper mapper = new ObjectMapper();
List personDtoList = mapper.readValue(request, new TypeReference>() {});
List responseDtoList = new ArrayList<>();
//单独处理第一个,用正序ResponseAscDto来接收
PersonDto personDto = personDtoList.get(0);
ResponseDto responseDto = mapper.readValue(mapper.writeValueAsString(personDto), ResponseAscDto.class);
//添加到父类集合
responseDtoList.add(responseDto);
//处理后面几个,用逆序ResponseDescDto来接收
for (int i = 1; i < personDtoList.size(); i++) {
    ResponseDto responseDescDto = mapper.readValue(mapper.writeValueAsString(personDto), ResponseDescDto.class);
    //添加到父类集合
    responseDtoList.add(responseDescDto);
}
//通过父类List集合一次性输出
String response = mapper.writeValueAsString(responseDtoList);
System.out.println("["response"] = " + response);

代码输出结果如下:

["response"] = [{"id":"1","name":"张三"},{"name":"张三","id":"1"},{"name":"张三","id":"1"}]

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/850503.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号