我在泛型方面从来没有那么好过,但我用了SnakeYaml。 有没有办法让我修复此代码
public class MyService{
private static Map<String, LinkedHashMap> myYamlMap;
public static void filter(Map<String, String>){
//myYaml map reads the YAML File using SnakeYaml
//Snake Yaml returns data in this format <String,LinkedHashMap>
Yaml yaml = new Yaml();
Object object = yaml.load(reader);
Map<String, LinkedHashMap> myYamlMap = (Map<String, LinkedHashMap>)object;
LinkedHashMap<String, LinkedHashMap> mainMap = (LinkedHashMap<String, LinkedHashMap>)myYamlMap.get("sample");
}
} 并摆脱此编译时警告?
Multiple markers at this line
- Line breakpoint:MyService [line: 69] - filter(Map<String, String>)
- Type safety: Unchecked cast from LinkedHashMap to LinkedHashMap<String,LinkedHashMap>
- LinkedHashMap is a raw type. References to generic type LinkedHashMap<K,V> should be
parameterized
- LinkedHashMap is a raw type. References to generic type LinkedHashMap<K,V> should be
parameterized
斯纳克亚姆尔..在其构造中使用LinkedHashMap,我想摆脱铸造。
给定您的代码:
private static Map<String, LinkedHashMap> myYamlMap;
LinkedHashMap<String, LinkedHashMap> mainMap = (LinkedHashMap<String, LinkedHashMap>)myYamlMap.get("sample");
这说不通。
private static Map<String, LinkedHashMap> myYamlMap;
这可能应该是
private static Map<String, Map<Key, Value>;
myYamlMap = new LinkedHashMap<String, Map<Key, Value>>;
myYamlMap.put("key1", new LinkedHashMap<Key,Value>();
对于某些未在代码中指定的Key
和Value
类型... 或者更复杂的东西 - 见下文
LinkedHashMap<String, LinkedHashMap> mainMap = (LinkedHashMap<String, LinkedHashMap>)myYamlMap.get("sample");
您在此处使用get
似乎暗示myYamlMap
应该是
private static Map<String, Map<String, Map<Key, Value>> myYamlMap;
myYamlMap = new LinkedHashMap<String, Map<String, Map<Key,Value>>>;
Map<Key,Value> temp = new LinkedHashMap<Key,Value>();
temp.put(k1, value1);
myYamlMap.put("sample", temp);
因为您似乎期望get()
从外部集合中返回Map<String,Map<Key,Value>>
。
现在你可以做
Map<String, Map<Key,Value>> mainMap = myYamlMap.get("sample");
使用Map
接口的原因是,代码中没有任何地方使用特定于LinkedHashMap
的方法,因此声明应该只使用Map<...>
除非在实例化映射时。