当前位置: 首页 > news >正文

Java中使用instanceof判断对象类型

记录:470

场景:Java中使用instanceof判断对象类型。例如在解析JSON字符串转换为指定类型时,先判断类型,再定向转换。在List<Object>中遍历Object时,先判断类型,再定向转换。

版本:JDK 1.8,Spring Boot 2.6.3。

一、解析Json字符串时,使用instanceof判断对象类型

场景:在基于微服务开发中,一个请求会贯穿多个微服务,一般在微服务之间传递参数均以JSON字符串为主流。

1.JSON字符串示例

{"getTime": "2023-08-13 17:50:12","getValue": ["13",350,193.62,37,"1813"]
}

解析:在getValue中传递参数,既有字符串、int型、double型等,在把JSON字符串时,无法转为指定类型,只能使用List<Object>类型是最合适。

需求:本例需求场景这些字符必须都转换为Double类型,再放到业务中使用。

2.使用instanceof判断对象类型

public static Double getDouble(Object obj) {if (obj == null) return null;Double result = null;try {if (obj instanceof Integer) {result = ((Integer) obj).doubleValue();} else if (obj instanceof Long) {result = ((Long) obj).doubleValue();} else if (obj instanceof Double) {result = (Double) obj;} else if (obj instanceof BigDecimal) {result = ((BigDecimal) obj).doubleValue();} else if (obj instanceof String) {result = Double.parseDouble((String) obj);}} catch (Exception e) {log.info("类型转换异常");e.printStackTrace();}return result;
}

3.测试示例

public static void f1() {String result = "{\n" +"  \"getTime\": \"2023-08-13 17:50:12\",\n" +"  \"getValue\": [\n" +"    \"13\",\n" +"    350,\n" +"    193.62,\n" +"    37,\n" +"    \"1813\"\n" +"  ]\n" +"}";JSONObject jsonResult = (JSONObject) JSON.parse(result);List<Object> listResult = (List<Object>) jsonResult.get("getValue");List<Double> listResultD = new ArrayList<>();//类型转换listResult.forEach(item -> {listResultD.add(getDouble(item));});//遍历结果listResultD.forEach(item -> {System.out.println("" + item);});
}

4.输出结果

执行f1
13.0
350.0
193.62
37.0
1813.0

二、遍历List<Object>时,使用instanceof判断对象类型

场景:在接收到结果集List<Object>时,Object的具体类型由多个时,使用instanceof判断对象类型,再转换增强代码合理性。

1.使用instanceof判断对象类型

public static Double getDouble(Object obj) {if (obj == null) return null;Double result = null;try {if (obj instanceof Integer) {result = ((Integer) obj).doubleValue();} else if (obj instanceof Long) {result = ((Long) obj).doubleValue();} else if (obj instanceof Double) {result = (Double) obj;} else if (obj instanceof BigDecimal) {result = ((BigDecimal) obj).doubleValue();} else if (obj instanceof String) {result = Double.parseDouble((String) obj);}} catch (Exception e) {log.info("类型转换异常");e.printStackTrace();}return result;
}

2.测试示例

public static void f2() {List<Object> list01 = new ArrayList<>();Integer integerV = 813;Long longV = 209206L;Double doubleV = 209207.13D;BigDecimal bigDecimal01 = new BigDecimal("209208.23");BigDecimal bigDecimal02 = new BigDecimal("209209");String strV = "209210.35";list01.add(integerV);list01.add(longV);list01.add(doubleV);list01.add(bigDecimal01);list01.add(bigDecimal02);list01.add(strV);List<Double> list02 = new ArrayList<>();//类型转换list01.forEach(item -> {list02.add(getDouble(item));});//遍历结果list02.forEach(item -> {System.out.println("" + item);});
}

3.输出结果

执行f2
813.0
209206.0
209207.13
209208.23
209209.0
209210.35

以上,感谢。

2023年8月13日

http://www.lryc.cn/news/122335.html

相关文章:

  • postman测试后端增删改查
  • 根据源码,模拟实现 RabbitMQ - 通过 SQLite + MyBatis 设计数据库(2)
  • 1、基于 CentOS 7 构建 LVS-DR 群集。 2、配置nginx负载均衡
  • android 如何分析应用的内存(十七)——使用MAT查看Android堆
  • Spring 使用注解储存对象
  • 一、初始 Spring MVC
  • 《爬虫》爬取页面图片并保存
  • 【项目部署】JavaScript解析JSON解析报错Unexpected token xxx is not valid JSON
  • 做接口测试如何上次文件
  • Java SPI机制详解-01
  • 由浅入深C系列六:C中实现字符串trim的功能
  • 博客网站添加复制转载提醒弹窗Html代码
  • ubuntu下nfs服务安装
  • Unity框架学习--2
  • WebRTC音视频通话-实现GPUImage视频美颜滤镜效果iOS
  • 82. 删除排序链表中的重复元素 II
  • centos 7.x 单用户模式
  • 取证--理论
  • Tik Tok娱乐+电商MCN怎么做?
  • java 自定义xss校验注解实现
  • Selenium图片滑块验证码
  • CAP理论与MongoDB一致性,可用性的一些思考
  • lc2536.子矩阵元素加1
  • C#使用OpenCv(OpenCVSharp)图像全局二值化处理实例
  • Patch SCN一键解决ORA-600 2662故障---惜分飞
  • const、指针、引用的综合
  • gitee linux免密/SSH 方式连接免登录
  • 计网第一章
  • windows升级记
  • 【Windows 常用工具系列 5 -- Selenium IDE的使用方法 】