in src/main/java/com/aliyun/tea/TeaModel.java [190:215]
private static <T extends TeaModel> T setTeaModelField(T model, Field field, Object value, String objectName, boolean userBuild) {
try {
Class<?> clazz = field.getType();
Object resultValue = parseNumber(value, clazz);
T result = model;
if (TeaModel.class.isAssignableFrom(clazz)) {
Object data = clazz.getDeclaredConstructor().newInstance();
if (userBuild) {
field.set(result, TeaModel.build(TeaModel.toMap(resultValue, false), (TeaModel) data));
} else if (!userBuild && Map.class.isAssignableFrom(resultValue.getClass())) {
field.set(result, TeaModel.toModel((Map<String, Object>) resultValue, (TeaModel) data));
} else {
field.set(result, resultValue);
}
} else if (Map.class.isAssignableFrom(clazz)) {
field.set(result, buildObject(resultValue, Map.class, getType(field, 1), objectName));
} else if (List.class.isAssignableFrom(clazz)) {
field.set(result, buildObject(resultValue, List.class, getType(field, 0), objectName));
} else {
field.set(result, confirmType(clazz, resultValue, objectName));
}
return result;
} catch (Exception e) {
throw new TeaException(e.getMessage(), e);
}
}