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