如何判断Map中的key或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()方法


一个用第二种方法的实例:

			//获取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);
			}

对value类型的判断类似。

你可能感兴趣的:(泛型,key,value,getClass,Map类型)