在上班寫工具類時,遇到了一個問題,將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);
}
