ネストされた静的なキャストをどのように扱いますか?

RIGOサルミエント:

私は単に持っていますMapしかし、それは返すことができますMapも返すことがあります、Mapこれは、3〜4ネストされたの可能次第ですMap秒。私は、ネストされた値にアクセスしたいときに、私はこれを実行する必要があります。

((Map)((Map)((Map)CacheMap.get("id")).get("id")).get("id")).get("id")

これを行うにはクリーンな方法はありますか?

私が使用している理由Map(新しいフィールドがある場合など)オブジェクトにマッピングするのではなく、メンテナンス性のためです。

注意:

Map<String, Object>

それはである必要がありObject、それは常に戻りませんのでHashmapこれは、返すことがStringLong

さらなる解明:

私がやっていることは、私が返すAPI呼んでいるであるjson私として保存応答をMap

ボヘミアン:

ここではいくつかのヘルパーメソッドは、5月のヘルプ物事はよりクリーンで読みやすいように見えるということです。

@SuppressWarnings("unchecked")
public static Map<String, Object> getMap(Map<String, Object> map, String key) {
    return (Map<String, Object>)map.get(key);
}

@SuppressWarnings("unchecked")
public static String getString(Map<String, Object> map, String key) {
    return (String)map.get(key);
}

@SuppressWarnings("unchecked")
public static Integer geInteger(Map<String, Object> map, String key) {
    return (Integer)map.get(key);
}

// you can add more methods for Date, Long, and any other types you know you'll get

しかし、あなたがしなければならないの呼び出し:

String attrValue = getString(getMap(getMap(map, id1), id2), attrName);

あなたはもっとファンキーな何かをしたい場合は、地図のimplにインスタンスメソッドとして上記の方法を追加します。

public class FunkyMap extends HashMap<String, Object> {
    @SuppressWarnings("unchecked")
    public FunkyMap getNode(String key) {
        return (FunkyMap)get(key);
    }

    @SuppressWarnings("unchecked")
    public String getString(String key) {
        return (String)get(key);
    }

    @SuppressWarnings("unchecked")
    public Integer geInteger(String key) {
        return (Integer)get(key);
    }

    // you can add more methods for Date, Long, and any other types you know you'll get
}

あなたのJSONライブラリを使用して、このクラスにデシリアライズは、その後、あなたがすることができます(おそらくマップクラスのimplのためのファクトリメソッドでそれを提供する必要があります)チェーンにもっと自然に電話を:

String attrValue = map.getNode(id1).getNode(id2).getString(attrName);

ファンキーなオプションは、私は会社のためにやったことであり、それは御馳走を働いた:)

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=239012&siteId=1