オブジェクト転换リスト「マップ「文字列、オブジェクト」」

使用するシーン

 List<Map<String,Object>> users = (List<Map<String,Object>>) Obj;

IDEAは、使用時にタイプがチェックされないという警告を表示します。

解決

  1. @SuperWarning({"unchecked"})で抑制
  2. 変換するツールクラスを作成する

方法1

 @SuperWarning({
    
    "unchecked"})
 List<User> users = (List<User>) Obj;

方法2

書いたときは、オブジェクト変換リストの書き方を参考にしましたが、oを処理したら、もう一度変換して各キーと値を取得したと言ったところです。
オブジェクト変換リストを書いた後、この方法をもっと考えました。 1時間以上、本当に自分の愚かさを賞賛する

  public static  List<Map<String,Object>> objConvertListMap(Object obj) throws IllegalAccessException {
    
    
        List<Map<String,Object>> result = new ArrayList<>();
        if (obj instanceof List<?>){
    
    
            for (Object o : (List<?>) obj) {
    
    
                Map<String,Object> map = new HashMap<>(16);
                Class<?> clazz = o.getClass();
                for (Field field : clazz.getDeclaredFields()) {
    
    
                    field.setAccessible(true);
                    String key = field.getName();
                    Object value = field.get(key);
                    if (value == null){
    
    
                        value = "";
                    }
                    map.put(key,value);
                }
                result.add(map);
            }
            return result;
        }
        return null;
    }

ブログ記事を書いた数分後、私は突然、より一般的な書き方を考えました。

    public static <V> List<Map<String,V>> objConvertListMap(Object obj, Class<V> vClass) throws IllegalAccessException {
    
    
        List<Map<String, V>> result = new ArrayList<>();
        if (obj instanceof List<?>) {
    
    
            for (Object o : (List<?>) obj) {
    
    
                Map<String, V> map = new HashMap<>(16);
                Class<?> oClass = o.getClass();
                for (Field field : oClass.getDeclaredFields()) {
    
    
                    field.setAccessible(true);
                    String key = field.getName();
                    Object value = field.get(key);
                    if (value == null) {
    
    
                        value = "";
                    }
                    map.put(key, vClass.cast(value));
                }
                result.add(map);
            }
            return result;
        }
        return null;
    }

这样就不会局限在转换到List<Map<String,Object>>这一种类型上了.
可以转换成List<Map<String,V>>上等,进行泛型转换
虽然多了一个参数,但是可以重载啊

注: 感觉field.get(key) 这里处理的不是很好,如果有更好的办法可以留言

方法3( Ling Xiaoます。兄貴が提供します)

	public static <K, V> List<Map<K, V>> castListMap(Object obj, Class<K> kCalzz, Class<V> vCalzz) {
    
    
		List<Map<K, V>> result = new ArrayList<>();
		if (obj instanceof List<?>) {
    
    
			for (Object mapObj : (List<?>) obj) {
    
    
				if (mapObj instanceof Map<?, ?>) {
    
    
					Map<K, V> map = new HashMap<>(16);
					for (Map.Entry<?, ?> entry : ((Map<?, ?>) mapObj).entrySet()) {
    
    
						map.put(kCalzz.cast(entry.getKey()), vCalzz.cast(entry.getValue()));
					}
					result.add(map);
				}
			}
			return result;
		}
		return null;
	}

ノート:

個人的には、警告を排除するために注釈を使用するのは好きではありません。これは排除されると思いますが、それでも隠れた危険性があるため、変換には静的メソッドを使用することにします。結果は制御可能です。

最後に書く

私は純粋な初心者ですが、私が書いたブログも、教材を探して解決した後、学習と使用で遭遇した問題のために書かれました。エラーや違反がある場合は、私に連絡してください。

QQ:994961015
メール:[email protected]

おすすめ

転載: blog.csdn.net/qq_37274323/article/details/107155178
おすすめ