public static Object confirmType()

in src/main/java/com/aliyun/tea/TeaModel.java [358:478]


    public static Object confirmType(Class expect, Object object, String objectName) {
        BigDecimal bigDecimal;
        if (String.class.isAssignableFrom(expect)) {
            if (object instanceof Number || object instanceof Boolean) {
                logger.info("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.",
                        objectName, String.class.getName(), object.getClass().getName(), object.toString());
                return object.toString();
            }
            if (object instanceof Map || object instanceof List) {
                logger.info("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.",
                        objectName, String.class.getName(), object.getClass().getName(), object.toString());
                return new Gson().toJson(object);
            }
        } else if (Boolean.class.isAssignableFrom(expect)) {
            if (object instanceof String) {
                logger.info("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.",
                        objectName, Boolean.class.getName(), object.getClass().getName(), object.toString());
                return Boolean.parseBoolean(String.valueOf(object));
            } else if (object instanceof Number) {
                if (object.toString().equals("1")) {
                    logger.info("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.",
                            objectName, Boolean.class.getName(), object.getClass().getName(), object.toString());
                    return true;
                } else if (object.toString().equals("0")) {
                    logger.info("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.",
                            objectName, Boolean.class.getName(), object.getClass().getName(), object.toString());
                    return false;
                }
            }
        } else if (Integer.class.isAssignableFrom(expect)) {
            if (object instanceof String) {
                try {
                    Integer.parseInt(object.toString());
                } catch (NumberFormatException e) {
                    logger.warning("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.",
                            objectName, Integer.class.getName(), object.getClass().getName(), object.toString());
                }
                bigDecimal = new BigDecimal(object.toString());
                return bigDecimal.intValue();
            }
            if (object instanceof Boolean) {
                logger.warning("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.",
                        objectName, Integer.class.getName(), object.getClass().getName(), object.toString());
                return object.toString().equalsIgnoreCase("true") ? 1 : 0;
            }
            if (object instanceof Long) {
                if ((Long) object > Integer.MAX_VALUE) {
                    logger.warning("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.",
                            objectName, Integer.class.getName(), object.getClass().getName(), object.toString());
                }
                bigDecimal = new BigDecimal(object.toString());
                return bigDecimal.intValue();
            }
            if (object instanceof Float || object instanceof Double) {
                bigDecimal = new BigDecimal(object.toString());
                logger.warning("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.",
                        objectName, Integer.class.getName(), object.getClass().getName(), object.toString());
                return bigDecimal.intValue();
            }
        } else if (Long.class.isAssignableFrom(expect)) {
            if (object instanceof String || object instanceof Integer) {
                try {
                    Long.parseLong(object.toString());
                } catch (NumberFormatException e) {
                    logger.warning("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.",
                            objectName, Long.class.getName(), object.getClass().getName(), object.toString());
                }
                bigDecimal = new BigDecimal(object.toString());
                return bigDecimal.longValue();
            }
            if (object instanceof Float || object instanceof Double) {
                bigDecimal = new BigDecimal(object.toString());
                logger.warning("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.",
                        objectName, Long.class.getName(), object.getClass().getName(), object.toString());
                return bigDecimal.longValue();
            }
        } else if (Float.class.isAssignableFrom(expect)) {
            if (object instanceof String) {
                try {
                    Float.parseFloat(object.toString());
                } catch (NumberFormatException e) {
                    logger.warning("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.",
                            objectName, Float.class.getName(), object.getClass().getName(), object.toString());
                }
                bigDecimal = new BigDecimal(object.toString());
                return bigDecimal.floatValue();
            }
            if (object instanceof Double) {
                if ((Double) object > Float.MAX_VALUE) {
                    logger.warning("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.",
                            objectName, Float.class.getName(), object.getClass().getName(), object.toString());
                }
                bigDecimal = new BigDecimal(object.toString());
                return bigDecimal.floatValue();
            }
            if (object instanceof Integer || object instanceof Long) {
                bigDecimal = new BigDecimal(object.toString());
                logger.warning("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.",
                        objectName, Float.class.getName(), object.getClass().getName(), object.toString());
                return bigDecimal.floatValue();
            }
        } else if (Double.class.isAssignableFrom(expect)) {
            if (object instanceof String || object instanceof Float) {
                try {
                    Double.parseDouble(object.toString());
                } catch (NumberFormatException e) {
                    logger.warning("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.",
                            objectName, Double.class.getName(), object.getClass().getName(), object.toString());
                }
                bigDecimal = new BigDecimal(object.toString());
                return bigDecimal.doubleValue();
            }
            if (object instanceof Integer || object instanceof Long) {
                bigDecimal = new BigDecimal(object.toString());
                logger.warning("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.",
                        objectName, Double.class.getName(), object.getClass().getName(), object.toString());
                return bigDecimal.doubleValue();
            }
        }
        return object;
    }