在上班寫工具類時,遇到了一個問題,將xml文件的節點都放入map容器中時,map的value也是一個map,導致取map的value時,需要判斷這個value的數據類型,用到了一下說的這些知識:
對於某些從泛型(比如:Map<K, V>)中繼承過來的數據,K可能是String、Integer、等等。如果需要map.get(key),得先確保key的類型跟map的K匹配。
對於key類型的判斷,大概的思路:通過map.keySet()獲取key的集合,存在Set<Object>類型變量中;然后用一個Object接收第一個key;然后有兩種方法判斷它的類型:
1、instanceof
2、class 的 equals()方法
g對於某些從泛型(比如:Map<K, V>)中繼承過來的數據,K可能是String、Integer、等等。如果需要map.get(key),得先確保key的類型跟map的K匹配。
對於key類型的判斷,大概的思路:通過map.keySet()獲取key的集合,存在Set<Object>類型變量中;然后用一個Object接收第一個key;然后有兩種方法判斷它的類型:
1、instanceof
2、class 的 equals()方法
第二種方法的實現:
//獲取cache中的key的class,用於判斷key的類型 Class<? extends Object> keyClass = null; Map<Object, Object> m = cache.getCache().asMap(); Set<Object> s = m.keySet(); for(Object k : s){ keyClass = k.getClass(); break;//只需要判斷第一個元素 } //根據cache中key的類型做類型轉換: if(keyClass.equals(Integer.class)){ //Integer類型 List<Integer> iKeys = new LinkedList<>(); for(Object key : keys){ iKeys.add(Integer.valueOf((String) key)); } cache.getCache().invalidateAll(iKeys); }else { //缺省為String類型,不用轉換 cache.getCache().invalidateAll(keys); }