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
到此这篇关于Java中使用instanceof判断对象类型的文章就介绍到这了,更多相关Java instanceof使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
SpringBoot2 整合Nacos组件及环境搭建和入门案例解析
这篇文章主要介绍了SpringBoot2 整合Nacos组件,环境搭建和入门案例详解,在整合springboot2时注意版本 0.2.x.RELEASE 对应的是 Spring Boot 2.x 版本,版本 0.1.x.RELEASE 对应的是 Spring Boot 1.x 版本,具体内容详情跟随小编一起看看吧2022-03-03
JUC并发编程LinkedBlockingQueue队列深入分析源码
LinkedBlockingQueue 是一个可选有界阻塞队列,这篇文章主要为大家详细介绍了Java中LinkedBlockingQueue的实现原理与适用场景,感兴趣的可以了解一下2023-04-04
简单谈谈java中final,finally,finalize的区别
Java中final、finally、finalize的区别与用法,困扰了不少学习者,下面我们就这个问题进行一些探讨,希望对大家的学习有所帮助。2016-05-05
Windows下使用IDEA搭建Hadoop开发环境的详细方法
这篇文章主要介绍了Windows下使用IDEA搭建Hadoop开发环境,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-12-12


最新评论