Stack<Class> inner_classes = new Stack<Class>();
inner_classes.addAll(ClassUtil.getGenericTypes(field_handle));
Collections.reverse(inner_classes);
JSONArray json_inner =json_object.getJSONArray(json_key);
if (json_inner == null) throw new JSONException("No array exists for '" + json_key + "'");
readCollectionField(json_inner, (Collection)field_object, inner_classes);
// Maps
} else if (field_object instanceof Map) {
if (LOG.isDebugEnabled()) LOG.debug("Field " + json_key + " is a map");
assert(field_object != null);
Stack<Class> inner_classes = new Stack<Class>();
inner_classes.addAll(ClassUtil.getGenericTypes(field_handle));
Collections.reverse(inner_classes);
JSONObject json_inner = json_object.getJSONObject(json_key);
if (json_inner == null) throw new JSONException("No object exists for '" + json_key + "'");
readMapField(json_inner, (Map)field_object, inner_classes);
// Everything else...
} else {
Class explicit_field_class = JSONUtil.getClassForField(json_object, json_key);