跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 请教下 Java 中, instanceof 在判断 Map 的时候怎么做?
未分類
31 1 月 2021

请教下 Java 中, instanceof 在判断 Map 的时候怎么做?

请教下 Java 中, instanceof 在判断 Map 的时候怎么做?

資深大佬 : ukipoi 6

比如

Object o = getXXX(); if (o instanceof HashMap) {     HashMap<String,?> map = (HashMap<String,?>) o;     //HashMap map = (HashMap) o; } 

两种方式 IDE 都会警告,那怎么处理比较好呢?

大佬有話說 (7)

  • 資深大佬 : zxlzy

    这个问题无解,只能
    @SuppressWarnings(“unchecked”)

  • 資深大佬 : young1lin

    上正解,你看它报什么警告,然后一般都会给你建议的。很多集合类的源码,都会加这个 @SuppressWarnings(“unchecked”)

  • 資深大佬 : liudaolunhuibl

    instanceof Map 呢,直接用 HashMap 应该违反了里氏替换原则并且不一定是 HashMap 有可能是 concurrentHashMap 呢

  • 資深大佬 : Menci

    没有很好的办法来判断,因为 Java 的编译是泛型擦除的,也就是说你写的所有泛型参数都只做编译器类型检查用,编译出来的程序,它的类型信息只是个 HashMap,并没有限制这个 HashMap 能存什么。所有的泛型变量编译出来都是 Object,你的 value 放进 Map 里就是以 Object 放进去的。

    如果真的要检查,就只能检查 HashMap 的每个成员的 key 是不是 String,当然这应该不是你想要的,你直接像上面说的那样忽略警告就好。

  • 資深大佬 : palmers

    void xx() {
    Object o = get();
    if (o instanceof Map) {
    Map map = (Map) o;
    Object k = map.get(“k”);
    // k instanceof xx
    }
    }

    Object get() {
    return new HashMap<String, Object>();
    }

    这样逐步判断吧

  • 資深大佬 : hdcjc

    如果能确定 key 或者 value 的类型,就写上相应的类型,再加上忽略警告的注解。不能确定的就用 ? ,两个都不能确定就两个都用 ? 。

  • 資深大佬 : unbright

    class MyObject extends HashMap<String,Object>

    然后再 instanceof MyObject 就可以了。

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具