Java中使用instanceof判斷對象類型的示例
記錄:470
場景:Java中使用instanceof判斷對象類型。例如在解析JSON字符串轉換為指定類型時,先判斷類型,再定向轉換。在List<Object>中遍歷Object時,先判斷類型,再定向轉換。
版本:JDK 1.8,Spring Boot 2.6.3。
一、解析Json字符串時,使用instanceof判斷對象類型
場景:在基于微服務開發(fā)中,一個請求會貫穿多個微服務,一般在微服務之間傳遞參數均以JSON字符串為主流。
1.JSON字符串示例
{
"getTime": "2023-08-13 17:50:12",
"getValue": [
"13",
350,
193.62,
37,
"1813"
]
}解析:在getValue中傳遞參數,既有字符串、int型、double型等,在把JSON字符串時,無法轉為指定類型,只能使用List<Object>類型是最合適。
需求:本例需求場景這些字符必須都轉換為Double類型,再放到業(yè)務中使用。
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.輸出結果
執(zhí)行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.輸出結果
執(zhí)行f2
813.0
209206.0
209207.13
209208.23
209209.0
209210.35
到此這篇關于Java中使用instanceof判斷對象類型的文章就介紹到這了,更多相關Java instanceof使用內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
springboot2.3 整合mybatis-plus 高級功能(圖文詳解)
這篇文章主要介紹了springboot2.3 整合mybatis-plus 高級功能,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08
SpringBoot和VUE源碼直接整合打包成jar的踩坑記錄
這篇文章主要介紹了SpringBoot和VUE源碼直接整合打包成jar的踩坑記錄,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-03-03

