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.mzph.cn/news/34986.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis系列(一):深入了解Redis数据类型和底层数据结构

Redis有以下几种常用的数据类型&#xff1a; redis数据是如何组织的 为了实现从键到值的快速访问&#xff0c;Redis 使用了一个哈希表来保存所有键值对。 Redis全局哈希表&#xff08;Global Hash Table&#xff09;是指在Redis数据库内部用于存储所有键值对的主要数据结构。…

安卓13不再支持PPTP怎么办?新的连接解决方案分享

随着Android 13的发布&#xff0c;我们迎来了一个令人兴奋的新品时刻。然而&#xff0c;对于一些用户而言&#xff0c;这也意味着必须面对一个重要的问题&#xff1a;Android 13不再支持PPTP协议。如果你是一个习惯使用PPTP协议来连接换地址的用户&#xff0c;那么你可能需要重…

C++ 泛型编程:函数模板

文章目录 前言一、什么是泛型编程二、函数模板三、函数模板的使用四、多参数函数模板五&#xff0c;示例代码&#xff1a;总结 前言 当需要编写通用的代码以处理不同类型的数据时&#xff0c;C 中的函数模板是一个很有用的工具。函数模板允许我们编写一个通用的函数定义&#…

Vue day02 Computed和Watch

1.事件绑定 可以用 v-on 指令监听DOM 事件&#xff0c;并在触发时运行一些 JavaScript 代码。v-on 还可以接收一个需要调用的方法名称。 <button v-on:click"handler">good</button> methods: { handler: function (event) { if (event) { alert(event.t…

接口测试之Jmeter+Ant+Jenkins接口自动化测试平台

平台简介 一个完整的接口自动化测试平台需要支持接口的自动执行&#xff0c;自动生成测试报告&#xff0c;以及持续集成。Jmeter支持接口的测试&#xff0c;Ant支持自动构建&#xff0c;而Jenkins支持持续集成&#xff0c;所以三者组合在一起可以构成一个功能完善的接口自动化…

BOLT- 识别和优化热门的基本块

在BOLT中&#xff0c;识别和优化热门的基本块之所以关键&#xff0c;是因为BOLT的主要目标是优化程序以更好地利用硬件特性&#xff0c;特别是指令缓存&#xff08;ICache&#xff09;。以下是BOLT如何识别和优化热门基本块的流程&#xff1a; 收集性能数据: BOLT开始的时候并不…

idea - 刷新 Git 分支数据 / 命令刷新 Git 分支数据

一、idea - 刷新 Git 分支数据 idea 找到 fetch 选项&#xff0c;重新获取分支数据 二、命令刷新 Git 分支数据 git fetch参考链接 1. 远程Gitlab新建的分支在IDEA里不显示

jxls导出问题

![请添加图片描述](https://img-blog.csdnimg.cn/bc74c4207818491c93b75e19b3333451.png 为什么最后导出的文件还是按原样导出啊&#xff0c;没有填充数据 ![在这里插入图片描述](https://img-blog.csdnimg.cn/d4500b9a98c042f6b64a5d0650071303.png

qt多线程使用方式

有5个方式&#xff1a;可以参考这个博客&#xff1a;Qt 中开启线程的五种方式_qt 线程_lucky-billy的博客-CSDN博客 注&#xff1a;为了实现更加灵活的线程管理&#xff08;因为这5种都有一些不方便之处&#xff1a;QThread需要子类化且不能传参&#xff0c;moveToThread不能传…

【leetcode】459. 重复的子字符串(easy)

给定一个非空的字符串 s &#xff0c;检查是否可以通过由它的一个子串重复多次构成。 示例 1: 输入: s “abab” 输出: true 解释: 可由子串 “ab” 重复两次构成。 示例 2: 输入: s “aba” 输出: false 示例 3: 输入: s “abcabcabcabc” 输出: true 解释: 可由子串 “ab…

ChatGPT等人工智能编写文章的内容今后将成为常态

BuzzFeed股价上涨200%可能标志着“转向人工智能”媒体趋势的开始。 周四&#xff0c;一份内部备忘录被华尔街日报透露BuzzFeed正计划使用ChatGPT聊天机器人-风格文本合成技术来自OpenAI&#xff0c;用于创建个性化盘问和将来可能的其他内容。消息传出后&#xff0c;BuzzFeed的…

ubuntu 20.04 RK3568网络的优先级设置

1、背景 硬件使用RK3568 CPU&#xff0c;操作系统采用ubuntu 20.04 Lxqt桌面的版本。硬件上具有一个有线以太网卡&#xff0c;一个wifi网卡&#xff0c;一个5G网卡。由于操作系统默认的网络优先级为有线网卡的最高&#xff0c;5G网卡次之。在一个业务应用中需要5G网卡的连接外…

文本三剑客之grep命令和awk命令 1.0 版本

grep awk 1.grep命令1.1 基本格式1.2 常用选项 2.awk命令2.1 awk工作原理2.2 awk命令格式2.3 awk常用内置变量 1.grep命令 1.1 基本格式 grep [选项]… 查找条件 目标文件1.2 常用选项 选项功能 -m [ x ]匹配x次 后停止,x为具体数字-v取反 -i忽略字符大小写 -n显示匹配的 …

Dynamic CRM开发 - 实体介绍

实体简介 在CRM中,实体(Entity)是数据的基本载体,也是构建业务逻辑网络的基础节点。 实体可以理解为数据库中的一张表(实体中的字段对应数据库表的字段),比如创建一个实体存储客户信息,创建一个实体存储产品信息,产品实体里可以创建一个查找类型的字段(类似表的外键)…

【Express.js】集成RabbitMQ

集成RabbitMQ 本节我们介绍在 express.js 中集成 rabbitmq. RabbitMQ 是一个消息队列中间件&#xff0c;常用于请求削峰&#xff0c;事务的队列处理&#xff0c;事件订阅机制的实现等。 准备工作 创建一个 express.js 项目&#xff08;本文基于evp-express-cli&#xff09;…

【三维编辑】Seal-3D:基于NeRF的交互式像素级编辑

文章目录 摘要一、引言二、方法2.1.基于nerf的编辑问题概述2.2.编辑指导生成2.3.即时预览的两阶段学生训练 三、实验四、代码总结 项目主页: https://windingwind.github.io/seal-3d/ 代码&#xff1a;https://github.com/windingwind/seal-3d/ 论文: https://arxiv.org/pdf/23…

创建一个Spring Boot项目

安装所需软件&#xff1a;首先确保你的计算机上已经安装了Java JDK和Maven构建工具。你可以从官方网站下载并按照说明进行安装。 创建一个新的Spring Boot项目&#xff1a;在命令行或终端中使用Maven命令创建一个新的Spring Boot项目。执行以下命令&#xff1a;mvn archetype:…

阿里云轻量应用服务器_2核4G4M_2核2G3M_性能测评

阿里云轻量应用服务器2核2G3M带宽108元一年&#xff0c;系统盘为50GB高效云盘&#xff1b;轻量服务器2核4G4M带宽&#xff0c;60GB高效云盘297.98元12个月。目前轻量应用服务器只有2核2G和2核4G有活动&#xff0c;阿里云百科分享阿里云轻量应用服务器入口&#xff1a; 目录 阿…

【Qt高阶】老Qt都不一定清楚的“QObject线程亲和性”【2023.08.13】

老Qt都不一定清楚的“线程亲和性” 与题目无关 感觉自己还挺2&#xff0c;有粉丝点了那个契约者会给up发个鼓励的话&#xff0c;我还以为是人私信发的&#xff0c;都挨个感谢了&#xff0c;后来才意识到是系统自动发的&#x1f623;&#x1f623;&#x1f623;。 自上上期视频对…

Three.js阴影

目录 Three.js入门 Three.js光源 Three.js阴影 Three.js纹理贴图 使用灯光后&#xff0c;场景中就会产生阴影。物体的背面确实在黑暗中&#xff0c;这称为核心阴影&#xff08;core shadow&#xff09;。我们缺少的是落下的阴影&#xff08;drop shadow&#xff09;&#…