首页 文章

如何解决以下警告? [关闭]

提问于
浏览
0

类型安全:方法put(Object,Object)属于原始类型HashMap . 应该参数化对泛型类型HashMap的引用 .

5 回答

  • 0

    可能在你的代码中的某个地方

    Map map = new HashMap();
    

    您应该使用hashmap中的键和值的 types 对其进行参数化 . 例如,如果使用 String keys en SomeObject 对象,则应使用:

    Map<String, SomeObject> map = new HashMap<String, SomeObject>();
    
  • 0

    使用泛型来定义您的集合,如下所示 .

    List<String> list=new ArrayList<String> ();

    对于您的情况,它是一张 Map ,您可以使用

    Map<String,String> map=new HashMap<String,String>();

    如果您将 immutable 对象定义为 keys ,如 String class 将是一个很好的做法

  • 3

    创建hashmap的正确方法是

    HashMap<String, Integer> hashmap = new HashMap<String, Integer>();
    

    您可以将String和Integer替换为您想要的任何类 . 第一个是所有键必须的类,第二个是所有值必须是的 .

  • 0

    理想情况下,你不应该使用它 . 使用泛型集合类型时,您需要更加具体地了解要作为键和值对象放置在 Map 中的对象类型 . 泛型有助于强制执行所谓的编译时类型检查 .

    但是如果您仍然坚持使用它,那么在您获取此警告的方法上或在发出此警告的代码语句上方使用@SuppressWarnings(“unchecked”)注释 . 但是,当您将对象从 Map 中获取并在代码中使用后,会给您施加负担 . 由于在继承层次结构中出现错误类型的情况,代码中的问题只有在jvm抛出类种姓异常时才会在运行时可见 .

  • 0

    你有一个通用 HashMap<T1, T2> 并尝试为它添加一个非T1和T2类型的键值对 . 即你有:

    HashMap<T1, T2> map = ...;
    Object o1
    Object o2;
    // ...
    map.put(o1, o2);     // generates warning
    

    你要:

    HashMap<T1, T2> map = ...;
    T1 o1;
    T2 o2;
    // ...
    map.put(o1, o2);     // no warning - notice the types!
    

    这是因为Java中的泛型只是模拟的 . 类型 HashMap<T1, T2> 仅存在于编译时,并且实际上是一种更好的方式来声明您的旧的非泛型 HashMap . 因此,它仍然具有原始的 put(Object, Object) 方法 . 在其他语言中,例如C#,该方法将不存在,而您将使用 put(T1, T2) 方法 .

    有关详细信息,请参阅What is wrong with Java's generics? .

相关问题