Java 对于ApacheCollections4多键,未经检查的调用意味着什么?如何修复它?
我正在更改HashMap以在类中使用多键 之前:Java 对于ApacheCollections4多键,未经检查的调用意味着什么?如何修复它?,java,intellij-idea,collections,Java,Intellij Idea,Collections,我正在更改HashMap以在类中使用多键 之前: HashMap<String, MyObject> map = new HashMap<>(); 您正在使用的原始类型提供的类型安全性低于非原始类型 private static MultiKey key(String s1, String s2) { return new MultiKey(s1,s2); } 这里的返回类型是原始类型多键。尝试将其更改为其参数化对应项多键: 私有静态多密钥(字符串s1、字符
HashMap<String, MyObject> map = new HashMap<>();
您正在使用的原始类型提供的类型安全性低于非原始类型
private static MultiKey key(String s1, String s2) {
return new MultiKey(s1,s2);
}
这里的返回类型是原始类型多键
。尝试将其更改为其参数化对应项多键
:
私有静态多密钥(字符串s1、字符串s2){
返回新的多键(s1、s2);
}
此外,地图定义也使用原始类型。换成
Map<MultiKey<String>, Descriptor> map = new HashMap<>();
Map Map=newhashmap();
请注意,在声明映射变量时最好使用接口(
Map
),而不是在这种情况下使用具体的类(HashMap
)。您使用的是原始类型,它提供的类型安全性比非原始类型低
private static MultiKey key(String s1, String s2) {
return new MultiKey(s1,s2);
}
这里的返回类型是原始类型多键
。尝试将其更改为其参数化对应项多键
:
私有静态多密钥(字符串s1、字符串s2){
返回新的多键(s1、s2);
}
此外,地图定义也使用原始类型。换成
Map<MultiKey<String>, Descriptor> map = new HashMap<>();
Map Map=newhashmap();
请注意,在本例中,在声明映射变量时最好使用接口(
Map
),而不是具体的类(HashMap
)。Map>
虽然我也做了此更改,但它阻止了什么?因为我没有收到任何警告。谢谢。如果变量定义为Map
,则可以将任何多键
作为键,例如多键
。稍后,您可以尝试使用(String)entry.getKey().getKey(0)
从该键中提取组件,希望它是字符串。但由于它将是一个整数
,因此cast将在运行时失败;这就是编译器警告您的原因。Map>
虽然我也做了此更改,但它阻止了什么?因为我没有收到任何警告。谢谢。如果变量定义为Map
,则可以将任何多键
作为键,例如多键
。稍后,您可以尝试使用(String)entry.getKey().getKey(0)
从该键中提取组件,希望它是字符串。但由于它将是一个整数
,因此cast将在运行时失败;这就是编译器警告您的原因。
Map<MultiKey<String>, Descriptor> map = new HashMap<>();