当前位置: 首页 > 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日

相关文章:

Java中使用instanceof判断对象类型

记录&#xff1a;470 场景&#xff1a;Java中使用instanceof判断对象类型。例如在解析JSON字符串转换为指定类型时&#xff0c;先判断类型&#xff0c;再定向转换。在List<Object>中遍历Object时&#xff0c;先判断类型&#xff0c;再定向转换。 版本&#xff1a;JDK 1…...

postman测试后端增删改查

目录 一、本文介绍 二、准备工作 &#xff08;一&#xff09;新建测试 &#xff08;二&#xff09;默认url路径查看方法 三、增删改查 &#xff08;一&#xff09;查询全部 &#xff08;二&#xff09;增加数据 &#xff08;三&#xff09;删除数据 &#xff08;四&…...

根据源码,模拟实现 RabbitMQ - 通过 SQLite + MyBatis 设计数据库(2)

目录 一、数据库设计 1.1、数据库选择 1.2、环境配置 1.3、建库建表接口实现 1.4、封装数据库操作 1.5、针对 DataBaseManager 进行单元测试 一、数据库设计 1.1、数据库选择 MySQL 是我们最熟悉的数据库&#xff0c;但是这里我们选择使用 SQLite&#xff0c;原因如下&am…...

1、基于 CentOS 7 构建 LVS-DR 群集。 2、配置nginx负载均衡

一、基于CentOS7和、构建LVS-DR群集 准备四台虚拟机 ip作用192.168.27.150客户端192.168.27.151LVS192.168.27.152RS192.168.27.152RS 关闭防火墙 [rootlocalhost ~]# systemctl stop firewalld安装ifconfig yum install net-tools.x86_64 -y1、DS上 1.1 配置LVS虚拟IP …...

android 如何分析应用的内存(十七)——使用MAT查看Android堆

android 如何分析应用的内存&#xff08;十七&#xff09;——使用MAT查看Android堆 前一篇文章&#xff0c;介绍了使用Android profiler中的memory profiler来查看Android的堆情况。 如Android 堆中有哪些对象&#xff0c;这些对象的引用情况是什么样子的。 可是我们依然面临…...

Spring 使用注解储存对象

文章目录 前言存储 Bean 对象五大注解五大注解示例配置包扫描路径读取bean的示例 方法注解 Bean Bean 命名规则重命名 Bean 前言 通过在 spring-config 中添加bean的注册内容&#xff0c;我们已经可以实现基本的Spring读取和存储对象的操作了&#xff0c;但在操作中我们发现读…...

一、初始 Spring MVC

文章目录 一、回顾 MVC 模式二、初始 Spring MVC2.1 Spring MVC 核心组件2.1.1 前端控制器&#xff08;DispatcherServlet&#xff09;2.1.2 处理器映射器&#xff08;HandlerMapping&#xff09;2.1.3 处理器适配器&#xff08;HandlerAdapter&#xff09;2.1.3 后端控制器&am…...

《爬虫》爬取页面图片并保存

爬虫 前言代码效果 简单的爬取图片 前言 这几天打算整理与迁移一下博客。因为 CSDN 的 Markdown 编辑器很好用 &#xff0c;所以全部文章与相关图片都保存在 CSDN。而且 CSDN 支持一键导出自己的文章为 markdown 文件。但导出的文件中图片的连接依旧是 url 连接。为了方便将图…...

【项目部署】JavaScript解析JSON解析报错Unexpected token xxx is not valid JSON

问题背景 这个报错发生在之前部署的一个前后端分离的项目中。后端使用的Spring Boot&#xff0c;前端使用的JavaScript&#xff0c;前后端交互使用Thymeleaf框架。 现象 项目组的另一个小伙伴说&#xff0c;突然有个页面打不开了&#xff0c;整个页面全空白。我F12打开浏览器…...

做接口测试如何上次文件

在日常工作中&#xff0c;经常有上传文件功能的测试场景&#xff0c;因此&#xff0c;本文介绍两种主流编写上传文件接口测试脚本的方法。 首先&#xff0c;要知道文件上传的一般原理&#xff1a;客户端根据文件路径读取文件内容&#xff0c;将文件内容转换成二进制文件流的格式…...

Java SPI机制详解-01

1. 概述 SPI&#xff08;Service Provider Interface&#xff09;&#xff0c;是 Java 6 引入了一个内置功能&#xff0c;实现服务提供发现和加载机制&#xff0c;使之与特定接口的匹配。 SPI 机制的核心思想就是 解耦 &#xff0c;将装配的控制权移到程序之外&#xff0c;这…...

由浅入深C系列六:C中实现字符串trim的功能

C中实现字符串trim的功能 简介设计思路代码实现运行效果 简介 一个项目中&#xff0c;需要用c语言实现对字符串中的字定字符进行过滤并从字符串的删除&#xff0c;查询了C语言的基本库&#xff0c;没有发现有这样的函数&#xff0c;于是发挥程序员的主观能力性&#xff0c;自力…...

博客网站添加复制转载提醒弹窗Html代码

网站如果是完全禁止右键&#xff08;复制、另存为等&#xff09;操作&#xff0c;对用户来说体验感会降低&#xff0c;但是又不希望自己的原创内容直接被copy&#xff0c;今天飞飞和你们分享几行复制转载提醒弹窗Html代码。 效果展示&#xff1a; 复制以下代码&#xff0c;将其…...

ubuntu下nfs服务安装

操作系统&#xff1a;ubuntu22.04.2 一、服务端安装与配置 1、在服务端安装nfs服务端组件 sudo apt install nfs-kernel-server 2、创建共享目录share并且授权所有人可以访问 sudo mkdir /shared sudo chmod -R 777 /shared 3、配置nfs sudo vim /etc/exports 这将允许…...

Unity框架学习--2

接上文 IOC 容器是一个很方便的模块管理工具。 除了可以用来注册和获取模块&#xff0c;IOC 容器一般还会有一个隐藏的功能&#xff0c;即&#xff1a; 注册接口模块 抽象-实现 这种形式注册和获取对象的方式是符合依赖倒置原则的。 依赖倒置原则&#xff08;Dependence I…...

WebRTC音视频通话-实现GPUImage视频美颜滤镜效果iOS

WebRTC音视频通话-实现GPUImage视频美颜滤镜效果 在WebRTC音视频通话的GPUImage美颜效果图如下 可以看下 之前搭建ossrs服务&#xff0c;可以查看&#xff1a;https://blog.csdn.net/gloryFlow/article/details/132257196 之前实现iOS端调用ossrs音视频通话&#xff0c;可以查…...

82. 删除排序链表中的重复元素 II

题目链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 解题思路&#xff1a;设置一个新的哑元节点result&#xff0c;作为头节点&#xff0c;将head中不重复地节点依次链接到哑元节点后面&#xff0c;最后返回result.next 初始值&…...

centos 7.x 单用户模式

最近碰到 centos 7.9 一些参数设置错误无法启动系统的情况&#xff0c;研究后可以使用单用户模式进入系统进行恢复操作。 进入启动界面&#xff0c;按 e ro 替换为 rw init/sysroot/bin/sh 替换前 替换后 Ctrl-x 进行重启进入单用户模式 执行 chroot /sysroot 可以查看日…...

取证--理论

资料&#xff1a; 各比赛 Writeup &#xff1a; https://meiyacup.cn/Mo_index_gci_36.html 哔站比赛复盘视频&#xff1a; https://space.bilibili.com/453117423?spm_id_from333.337.search-card.all.click 自动分析取证四部曲 新建案例添加设备自动取证制作报告 取证大…...

Tik Tok娱乐+电商MCN怎么做?

在美国外的热门市场中&#xff0c;TikTok 主要做的区域市场包括中东、拉美、欧洲和东亚&#xff0c;而这里面适合做电商的其实并不多。 欧洲、东亚都属于成熟市场&#xff0c;且 TikTok 本身在欧洲面临 DSA 法案更严格的审查&#xff0c;与在英国相同&#xff0c;欧洲各市场消…...

新手避坑指南:微信小程序组件通信最常见的3个错误用法(附正确示范)

微信小程序组件通信避坑手册&#xff1a;3个高频错误与实战修复方案 刚接触微信小程序开发的工程师&#xff0c;往往会在组件通信环节踩中一些隐蔽的"地雷"。这些陷阱轻则导致页面渲染异常&#xff0c;重则引发内存泄漏和性能劣化。本文将解剖三个最具迷惑性的典型错…...

NSudo终极指南:3分钟掌握Windows最高权限管理的5个实用技巧 [特殊字符]

NSudo终极指南&#xff1a;3分钟掌握Windows最高权限管理的5个实用技巧 &#x1f680; 【免费下载链接】NSudo [Deprecated, work in progress alternative: https://github.com/M2Team/NanaRun] Series of System Administration Tools 项目地址: https://gitcode.com/gh_mi…...

深入解析PVT corner:wcl、wc、lt、tc、ml对cell delay的影响

1. PVT corner基础&#xff1a;理解工艺、电压、温度的三角关系 在芯片设计的世界里&#xff0c;PVT&#xff08;工艺Process、电压Voltage、温度Temperature&#xff09;就像决定电路性能的"天气系统"。想象你正在驾驶一辆车&#xff1a;工艺是发动机的性能&#xf…...

Python @overload 装饰器深度解析

一、引言&#xff1a;Python中的"伪重载"机制 在传统静态类型语言如Java、C中&#xff0c;函数重载&#xff08;Function Overloading&#xff09;是指允许定义多个同名函数&#xff0c;通过参数的数量、类型或顺序区分调用方式&#xff0c;实现不同输入对应不同处理…...

微信对接OpenClaw的常见问题和解决方案回

AI Agent 时代的沙箱需求 从 Copilot 到 Agent&#xff1a;执行能力的质变 在生成式 AI 的早期阶段&#xff0c;应用主要以“Copilot”形式存在&#xff0c;AI 仅作为辅助生成建议。然而&#xff0c;随着 AutoGPT、BabyAGI 以及 OpenAI Code Interpreter&#xff08;现为 Advan…...

Chandra OCR实战:手把手教你批量处理扫描件,保留表格公式直接进知识库

Chandra OCR实战&#xff1a;手把手教你批量处理扫描件&#xff0c;保留表格公式直接进知识库 1. 为什么选择Chandra OCR 在日常工作中&#xff0c;我们经常遇到这样的困扰&#xff1a; 扫描的合同、发票、学术论文等文档&#xff0c;传统OCR工具只能识别文字&#xff0c;丢…...

PvZ Toolkit:解锁植物大战僵尸无限潜能的终极修改工具

PvZ Toolkit&#xff1a;解锁植物大战僵尸无限潜能的终极修改工具 【免费下载链接】pvztoolkit 植物大战僵尸 PC 版综合修改器 项目地址: https://gitcode.com/gh_mirrors/pv/pvztoolkit 还在为植物大战僵尸中的资源限制而烦恼吗&#xff1f;想要体验创意玩法却受限于游…...

internlm2-chat-1.8b在教育场景应用:自动批改作文+生成习题的AI助教落地案例

internlm2-chat-1.8b在教育场景应用&#xff1a;自动批改作文生成习题的AI助教落地案例 想象一下&#xff0c;一位语文老师深夜还在批改堆积如山的作文本&#xff0c;既要圈出错别字、病句&#xff0c;又要写评语、给建议&#xff0c;常常忙到深夜。另一边&#xff0c;数学老师…...

Qwen3-4B商业应用案例:电商文案、代码生成、多语言翻译实战

Qwen3-4B商业应用案例&#xff1a;电商文案、代码生成、多语言翻译实战 1. 为什么选择Qwen3-4B进行商业应用 在当今商业环境中&#xff0c;效率和质量是企业竞争力的核心。Qwen3-4B Instruct-2507作为阿里通义千问系列中的轻量级纯文本大模型&#xff0c;凭借其专注的文本处理…...

RMBG-2.0企业知识库建设:抠图操作SOP文档、FAQ知识图谱与智能客服接入

RMBG-2.0企业知识库建设&#xff1a;抠图操作SOP文档、FAQ知识图谱与智能客服接入 1. 引言&#xff1a;当智能抠图遇上企业流程 想象一下&#xff0c;你是一家电商公司的设计主管。每天&#xff0c;团队需要处理上百张商品图片——换背景、做海报、上架新品。设计师们重复着“…...