Java 对于ApacheCollections4多键,未经检查的调用意味着什么?如何修复它?

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以在类中使用多键

之前:

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