泛型处理LinkedHashMap <string,linkedhashmap =“”>

时间:2018-05-05 07:26:23

标签: java generics collections snakeyaml

我在Generics中从未如此出色,但我使用的是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

Snakeyaml ..在其构造中使用了LinkedHashMap,我想逃脱施法。

1 个答案:

答案 0 :(得分:0)

鉴于你的代码:

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>();

对于某些KeyValue类型,这些类型未在您的代码中指定... 或者更复杂的东西 - 见下文

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<...>,除非实例化地图。 / p>