java - 将 String、ArrayList 等对象添加到 List<Object>

标签 java generics

我有一个数据结构Map < String, Map < ConfigKey, ConfigValue<Object > > > 。这就像 Map “命名空间”到Map从“键”到“值”。我的解析器读取配置文件并动态决定该值是否应被视为 StringArrayList .

我看到添加 ArrayList 时出错到上面的数据结构。请告诉我如何解决这个问题。

private Map<String, Map<ConfigKey, ConfigValue<Object>>> configuration = new HashMap<String, Map<ConfigKey, ConfigValue<Object>>>();
:
configuration.get(groupName).put(new ConfigKey(key), new ConfigValue<Object>(override, value)); // works
:
configuration.get(groupName).put(new ConfigKey(key), new ConfigValue<List>(override, Arrays.asList(values))); // does not work

最佳答案

ConfigValue<List> is not a ConfigValue<Object>.

Read more about covariance and contravariance in Java或在 programming in general.

这样就可以解决

private Map<String, Map<ConfigKey, ConfigValue<? extends Object>>> configuration = new HashMap<String, Map<ConfigKey, ConfigValue<? extends Object>>>();

Map<String, Map<ConfigKey, ConfigValue<?>>> 

请避免 raw-types在您的代码中。

关于java - 将 String、ArrayList 等对象添加到 List<Object>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31362159/

相关文章:

java - JSF、JBOSS 显示不正确

java - 获取今天起最后 "X"天?

java - 比较两个文件路径的关系

java - 当我不提供通用类型时,为什么这个类的行为不同?

使用模板时出现 C++ 指针错误

C++ 限制泛型中的类型(和指针问题)

java - HttpURLConnection 超时设置

java - 为什么在同步线程时 WebMethods 会被阻塞?

generics - f# 可区分联合泛型

c# - IList<T>.Split() 扩展方法的方法签名