Map、JSONObjectからキー値ペアが存在しない場合の異常

1693 ワード

1.Mapに存在しないキー値ペアをとると異常は報告されずnullのみが返されます.
@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というコンパイルエラーが発生します.