• BasicConverter 基本数据类型转换器


    package cn.ubibi.jettyboot.framework.commons;
    
    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.JSONArray;
    import com.alibaba.fastjson.JSONObject;
    
    import java.math.BigDecimal;
    import java.math.BigInteger;
    import java.sql.Timestamp;
    import java.util.Date;
    import java.util.List;
    
    public class BasicConverter {
    
        //一个缓存避免重复转换成字符串
        private String stringValueCached = null;
        private Object value;
    
    
        public BasicConverter(Object value) {
            this.value = value;
        }
    
    
    
        public Object toTypeOf(Class targetType){
    
            if (isNull()){
                return null;
            }
    
            Class valueType = value.getClass();
            if (targetType == valueType || targetType.equals(valueType)) {
                return value;
            }
    
            if (targetType == String.class) {
                return this.getStringValue();
            } else if (isTypeOf(targetType, Integer.class, Integer.TYPE)) {
                return this.toInteger();
            } else if (isTypeOf(targetType, Float.class, Float.TYPE)) {
                return this.toFloat();
            } else if (isTypeOf(targetType, Double.class, Double.TYPE)) {
                return this.toDouble();
            } else if (isTypeOf(targetType, Long.class, Long.TYPE)) {
                return this.toLong();
            } else if (isTypeOf(targetType, Boolean.class, Boolean.TYPE)) {
                return this.toGeneralizedBoolean();
            } else if (isTypeOf(targetType, Short.class, Short.TYPE)) {
                return this.toShort();
            } else if (targetType == Timestamp.class) {
                return this.toTimestamp();
            } else if (targetType == Date.class) {
                return this.toDate();
            } else if (targetType == BigDecimal.class) {
                return this.toBigDecimal();
            } else if (targetType == BigInteger.class) {
                return this.toBigInteger();
            } else if (targetType == JSONObject.class) {
                return this.toJSONObject();
            } else if (targetType == JSONArray.class) {
                return this.toJSONArray();
            }
            return value;
        }
    
    
    
    
    
    
        public Short toShort() {
            if (isNull()) {
                return 0;
            }
    
            if (value instanceof Short) {
                return (Short) value;
            }
            return Short.valueOf(ignoreDotAfter(getStringValue()));
        }
    
    
        public Integer toInteger() {
            if (isNull()) {
                return 0;
            }
    
            if (value instanceof Integer) {
                return (Integer) value;
            }
    
            return Integer.valueOf(ignoreDotAfter(getStringValue()));
        }
    
    
        public Long toLong() {
            if (isNull()) {
                return 0L;
            }
    
            if (value instanceof Long) {
                return (Long) value;
            }
    
            return Long.valueOf(ignoreDotAfter(getStringValue()));
        }
    
    
        /**
         * 忽略掉小数点及以后的字符串
         *
         * @param value 类似于:123.3223  .00
         * @return 无小数点的字符串
         */
        private String ignoreDotAfter(String value) {
            String v = value;
            int indexOfDot = v.indexOf(".");
            if (indexOfDot == 0) {
                return "0";
            }
            if (indexOfDot > 0) {
                v = v.substring(0, indexOfDot);
            }
            return v;
        }
    
    
        public Float toFloat() {
            if (isNull()) {
                return 0F;
            }
            if (value instanceof Float) {
                return (Float) value;
            }
            return Float.valueOf(getStringValue());
        }
    
        public Double toDouble() {
            if (isNull()) {
                return 0D;
            }
    
            if (value instanceof Double) {
                return (Double) value;
            }
    
            return Double.valueOf(getStringValue());
        }
    
        public Boolean toBoolean() {
            if (value instanceof Boolean) {
                return (Boolean) value;
            }
    
            return "true".equalsIgnoreCase(getStringValue());
        }
    
    
        //广义的boolean类型
        public Boolean toGeneralizedBoolean() {
            if (value instanceof Boolean) {
                return (Boolean) value;
            }
            if (isNull() || "0".equals(getStringValue()) || "false".equals(getStringValue())) {
                return false;
            }
            return true;
        }
    
    
        public BigInteger toBigInteger() {
            if (isNull()) {
                return new BigInteger("0");
            }
    
            if (value instanceof BigInteger) {
                return (BigInteger) value;
            }
    
            return new BigInteger(ignoreDotAfter(getStringValue()));
        }
    
        public BigDecimal toBigDecimal() {
            if (isNull()) {
                return new BigDecimal(0);
            }
    
            if (value instanceof BigDecimal) {
                return (BigDecimal) value;
            }
    
            return new BigDecimal(getStringValue());
        }
    
    
        public Date toDate() {
            return toTimestamp();
        }
    
    
        public Timestamp toTimestamp() {
            if (isNull()) {
                return null;
            }
    
    
            if (value instanceof Timestamp) {
                return (Timestamp) value;
            }
    
            long longDate = toLong();
            Timestamp timestamp = new Timestamp(longDate);
            return timestamp;
        }
    
    
        public Object getValue() {
            return value;
        }
    
        public void setValue(Object value) {
            this.value = value;
        }
    
    
        public String toString() {
            return getStringValue();
        }
    
    
        public JSONObject toJSONObject() {
            if (isNull()) {
                return null;
            }
    
            if (value instanceof JSONObject) {
                return (JSONObject) value;
            }
    
            return JSON.parseObject(getStringValue());
        }
    
    
        public <T> T toJSONObject(Class<? extends T> clazz) {
            if (isNull()) {
                return null;
            }
            return JSON.parseObject(getStringValue(), clazz);
        }
    
        public JSONArray toJSONArray() {
            if (isNull()) {
                return null;
            }
            return JSON.parseArray(getStringValue());
        }
    
    
        public <T> List<T> toJSONArray(Class<T> clazz) {
            if (isNull()) {
                return null;
            }
            return JSON.parseArray(getStringValue(), clazz);
        }
    
    
    
        public String getStringValue() {
            if (isNull()) {
                return null;
            }
            if (stringValueCached == null) {
                stringValueCached = this.value.toString();
            }
            return stringValueCached;
        }
    
    
        public boolean isNull() {
            return this.value == null;
        }
    
    
        /**
         * 判断数据类型是否需要转换
         *
         * @param fieldType
         * @param targetClass1
         * @param targetClass2
         * @return 是否
         */
        private static boolean isTypeOf(Class fieldType, Class targetClass1, Class targetClass2) {
            return fieldType == targetClass1 || fieldType == targetClass2;
        }
    
        public boolean isEmptyString() {
            return getStringValue() == null || getStringValue().isEmpty();
        }
    
    }
    

      

  • 相关阅读:
    MyGame--java语言编写的打飞机游戏(附源码下载)
    调用MyFocus库,简单实现二十几种轮播效果
    aBowman >>可以运用到自己博客上的小插件
    css通用小笔记03——浏览器窗口变小 div错位的问题
    css通用小笔记02——浮动、清除(三个例子)
    css通用小笔记01——导航背景
    PHP强制转换类型
    数据库---查询语句(三):高级查询
    数据库---T-SQL语句:查询语句(二)
    数据库---T-SQL语句(一)
  • 原文地址:https://www.cnblogs.com/lhp2012/p/9018417.html
Copyright © 2020-2023  润新知