簡體   English   中英

如何從地圖中獲取對象值?

[英]How to get the object value from a Map?

Map<String, Object> subSource2 = (Map<String, Object>)departmentPHSSuportEmail.get("SubSource");
List<Map<String , Object>> myMap2  = (List<Map<String , Object>>)subSource2.get("value");
Map<String,Object> subSourceMap3 = myMap2.get(0);
String value = (String)subSourceMap3.get("value");

在這里,我不會將該值指定為String 它可以是任何類型。 因此,當我將其轉換為 String 時,只應接受String值,而不能接受其他數據類型。那么有什么方法可以更改以下代碼?

String value = (String)subSourceMap3.get("value");

到另一個接受所有其他數據類型。

如果您可以在 Map 中擁有與該鍵關聯的任何類型,並且只想將String值轉換為String ,則需要在轉換之前檢查類型:

Object rawValue = subSourceMap3.get("value");
if (rawValue instanceof String) {
    String value = (String) rawValue;
    // do what you want with the String value
} else if (rawValue instanceof Long) { // or whatever else
    // cast to Long
} else {
    // throw an exception for unknown types or do nothing
}

但是,如果您的代碼只能處理字符串表示,則您可以在上面的rawValue上調用.toString() (除非它是null !)而不關心它的實際類型。

subSourceMap3 是您的 Map 並且 get() 返回您想要的對象。

Object yourObj = subSourceMap3.get("value");

沒有任何演員。

您可以使用

Object value = subSourceMap3.get("value");

或者,如果您可以將其轉換為任何對象或自定義對象

YourCustomObject value = (YourCustomObject)subSourceMap3.get("value");

希望這可能會有所幫助。

對於評論中提到的情況,您可以使用以下代碼片段並根據您收到的數據類型添加條件:-

    if(val.get("sample") instanceof Double) {
        itemjson.setTest((Double) val.get("sample"));
    }else if(val.get("sample") instanceof Integer) {
        itemjson.setTest((Integer) val.get("sample"));
    }else if(val.get("sample") instanceof Float) {
        itemjson.setTest((Float) val.get("sample"));
    }else if(val.get("sample")==JSONObject.NULL){
        itemjson.setTest(null);
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM