Java 类型转换问题

标签 java generics casting

为什么不是 Map<String,List<SomeBean>>可浇注至Map<String,List<?>>

我现在正在做的是:

Map<String, List<SomeBean>> fromMap = new LinkedHashMap<String, List<SomeBean>>();

/* filling in data to fromMap here */

Map<String,List<?>> toMap = new LinkedHashMap<String, List<?>>();
for (String key : fromMap.keySet()) {
    toMap.put(key, fromMap.get(key));
}

在我看来,应该有一种方法可以绕过这种手动转换,但我不知道如何实现。有什么想法吗?

最佳答案

转换无效,因为在 Map> 中您可以放置​​ List 和 List,但不能在 Map> 中放置。

例如:

    //List<SomeBean> are ok in both lists
    fromMap.put("key", new ArrayList<SomeBean>());
    toMap.put("key", new ArrayList<SomeBean>());

    //List<String> are ok in Map<String,List<?>>, not in Map<String, List<SomeBean>>
    fromMap.put("key", new ArrayList<String>()); //DOES NOT COMPILE
    toMap.put("key", new ArrayList<String>());

为了简化您的代码,您可以使用适当的构造函数来简化您的代码:

    Map<String, List<SomeBean>> fromMap = new LinkedHashMap<String, List<SomeBean>>();
    Map<String,List<?>> toMap = new LinkedHashMap<String, List<?>>(fromMap);

关于Java 类型转换问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1939871/

相关文章:

C++ 错误 : no viable conversion from 'mapped_type' to 'int'

java - 调试连续值 Android Studio

java - 在 Java 中使用泛型返回接口(interface)实例的枚举?

Java - 将类型传递给父类(super class)静态方法

java - float 类型转换无法正常工作,始终计算为 0.0

c++ - 什么时候必须/应该使用 dynamic_cast 而不是 static_cast?

Java 8 toMap IllegalStateException 重复键

java - 不同包中特定方法的切入点表达式

java - Selenium XPath : ancestor does not contain

java - 通配符和通用类/方法声明的不同政策。为什么?