如何判断Map中的key或value类型
2015-12-23 18:24
302 查看
对于某些从泛型(比如: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类型的判断,大概的思路:通过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类型的判断类似。
相关文章推荐
- JAVA泛型—— 3fe8 转
- JAVA泛型详解——转
- Debian灾难性漏洞
- 编写高质量代码改善C#程序――使用泛型集合代替非泛型集合(建议20)
- C#通过反射创建自定义泛型
- C#泛型用法实例分析
- INSERT INTO .. ON DUPLICATE KEY更新多行记录
- MySQL之Field‘***’doesn’t have a default value错误解决办法
- C语言泛型编程实例教程
- C# 泛型的简单理解(安全、集合、方法、约束、继承)分享
- C#泛型Dictionary的用法实例详解
- C#泛型和反射实例解析
- C#泛型实例详解
- 把input初始值不写value的具体实现方法
- jquery 根据name名获取元素的value值
- jQuery获取Select选择的Text和Value(详细汇总)
- jQuery操作Select选择的Text和Value(获取/设置/添加/删除)
- .NET开发基础:从简单的例子理解泛型 分享
- javascript实现类似java中getClass()得到对象类名的方法
- JS获取下拉列表所选中的TEXT和Value的实现代码