Map、JSONObjectからキー値ペアが存在しない場合の異常
1693 ワード
1.Mapに存在しないキー値ペアをとると異常は報告されずnullのみが返されます.
2.JSONObjectで存在しないキー値を時分割する場合:
jSONObjectを利用する.get(Object key)メソッドおよびget(String key)は、存在しないキー値ペアをとると異常が報告されずnullを返します.しかしjSONObjectを利用する.getxxx(String key)メソッドは、空のポインタ異常を報告します.
null処理時に空のポインタ異常が報告されます.
Object nullの場合は、他のタイプがObjectのサブクラスであるため、他のタイプのnullに変換できます.しかし、親子関係のあるタイプでない限り、他のタイプのnullは勝手にタイプを変えることはできません.たとえば、StringタイプがUserタイプに移行したい場合、Cannot cast from String to Userというコンパイルエラーが発生します.
@Test
public void testMap() {
Map map = new HashMap();
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 map = new HashMap();
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の場合は、他のタイプがObjectのサブクラスであるため、他のタイプのnullに変換できます.しかし、親子関係のあるタイプでない限り、他のタイプのnullは勝手にタイプを変えることはできません.たとえば、StringタイプがUserタイプに移行したい場合、Cannot cast from String to Userというコンパイルエラーが発生します.