您的位置:首页 > 移动开发 > Objective-C

从Map、JSONObject取不存在键值对时的异常情况

2016-03-17 15:00 567 查看
1.在Map中取不存在的键值对时不会报异常,只会返回null。

@Test
public void testMap() {
Map<String, Object> map = new HashMap<String, Object>();
map.put("d", 10);
Object b = map.get("c");
System.out.println(b);
}
//打印结果是:null。
结论:从map中取出不存在的键值对时不会报异常,会返回null。

2.在JSONObject中取不存在的键值对时分两种情况:

利用jSONObject.get(Object key)方法及get(String key)取不存在的键值对时不会报异常,会返回null;但是利用jSONObject.getxxx(String key)方法取时会报空指针异常:

@Test
public void testJSONObject() {
Map<String, Object> map = new HashMap<String, Object>();
map.put("d", 10);
JSONObject jSONObject = JSONObject.fromObject(map);
int xx = jSONObject.getInt("d");
System.out.println(xx);
// 从jSONObject中用get(Object key)方法取出不存在的键值对时不会报异常,会返回null
Object y = jSONObject.get("dd");
System.out.println(y);
// 从jSONObject中用getxxx(String key)方法取出不存在的键值对时报异常
String y2 = jSONObject.getString("dd");
System.out.println(y2);
}


对null处理时会报空指针异常:
@Test
public void testNull() {
Object o = null;
System.out.println(o);
String s = (String) o;
System.out.println(s);
// System.out.println(s.getClass());
User u = (User) o;
System.out.println(u);
// System.out.println(u.getClass());
}
//打印结果:
//null
//null
//null
分析可知:不管null是何种类型,Object null或者String null或者其他类型的null,调用getClass()方法时都会报空指针异常。

如果是Object null,则可以转为其他类型的null,因为其他类型都是Object的子类。但是其他类型的null不能随便转类型,除非是有父子关系的类型。例如,如果String类型的想转为User类型的,就会有编译错误,说Cannot cast from String to User。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: