使用するシーン
List<Map<String,Object>> users = (List<Map<String,Object>>) Obj;
IDEAは、使用時にタイプがチェックされないという警告を表示します。
解決
- @SuperWarning({"unchecked"})で抑制
- 変換するツールクラスを作成する
方法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]