为了账号安全,请及时绑定邮箱和手机立即绑定

data converter

标签:
Java

public interface Converter {    /**     * 进行转换操作     * @param val 原对象     * @return 转换后对象     */    Object convert(Object val);}
public abstract class AbstractConverter implements Converter{    private boolean useDefaultVal = false;    private Object defaultVal = null;    public boolean isUseDefaultVal() {        return useDefaultVal;    }    public void setUseDefaultVal(boolean useDefaultVal) {        this.useDefaultVal = useDefaultVal;    }    public Object getDefaultVal() {        return defaultVal;    }    public void setDefaultVal(Object defaultVal) {        this.defaultVal = defaultVal;    }    protected abstract Class<?> getTargetClass();    protected abstract Object convert2Type(Object val);    protected abstract String convert2String(Object val);        @Override    public Object convert(Object val) {        if (null == val)            return handleNullVal(val);         if (getTargetClass().equals(val.getClass()))             return getTargetClass().cast(val);         if (getTargetClass().equals(String.class))             return getTargetClass().cast(convert2String(val));        return getTargetClass().cast(convert2Type(val));    }        protected Object handleNullVal(Object val){        if (isUseDefaultVal())            return getDefaultVal();        return val;    }        protected  <T> Class<T> primitiveToWrapper(final Class<T> type) {        if (type == null || !type.isPrimitive())            return type;        if (type == Integer.TYPE)            return (Class<T>) Integer.class;        if (type == Double.TYPE)            return (Class<T>) Double.class;        if (type == Long.TYPE)            return (Class<T>) Long.class;        if (type == Boolean.TYPE)            return (Class<T>) Boolean.class;        if (type == Float.TYPE)            return (Class<T>) Float.class;        if (type == Short.TYPE)            return (Class<T>) Short.class;        if (type == Byte.TYPE)            return (Class<T>) Byte.class;        if (type == Character.TYPE)            return (Class<T>) Character.class;        return type;    }}
public abstract class NumberConverter extends AbstractConverter {    @Override    protected Number convert2Type(Object val) {        final Class<?> sourceType = val.getClass();        Number targetVal;        if (val instanceof Number)            targetVal = (Number) val;        else if (val instanceof Boolean)            targetVal = ((Boolean)val).booleanValue() ? 1 : 0;        else if (val instanceof Date)            targetVal = ((Date)val).getTime();        else if (val instanceof Calendar)            targetVal = ((Calendar)val).getTime().getTime();        else            targetVal = toNumber(sourceType, (Class<? extends Number>) getTargetClass(),  val.toString().trim());        return toNumber(sourceType, (Class<? extends Number>) getTargetClass(), targetVal);    }    @Override    protected String convert2String(Object val) {        return String.valueOf(val);    }    private Number toNumber(final Class<?> sourceType, final Class<? extends Number> targetType, final Number value){            if (targetType.equals(sourceType))            return targetType.cast(value);        if (targetType.equals(Byte.class)){            final long longValue = value.longValue();            if (longValue > Byte.MAX_VALUE)                throw new IllegalArgumentException("the value is bigger than Byte.MAX_VALUE");            if (longValue < Byte.MIN_VALUE)                throw new IllegalArgumentException("the value is smaller than Byte.MIN_VALUE");            return value.byteValue();        }            if (targetType.equals(Short.class)){            final long longValue = value.longValue();            if (longValue > Short.MAX_VALUE)                throw new IllegalArgumentException("the value is bigger than Short.MAX_VALUE");            if (longValue < Short.MIN_VALUE)                throw new IllegalArgumentException("the value is smaller than Short.MIN_VALUE");            return value.shortValue();        }        if (targetType.equals(Integer.class)){            final long longValue = value.longValue();            if (longValue > Integer.MAX_VALUE)                throw new IllegalArgumentException("the value is bigger than Integer.MAX_VALUE");            if (longValue < Integer.MIN_VALUE)                throw new IllegalArgumentException("the value is smaller than Integer.MIN_VALUE");            return value.intValue();        }        if (targetType.equals(Long.class)) {            return targetType.cast(new Long(value.longValue()));        }        if (targetType.equals(Float.class)){            final double doubleValue = value.doubleValue();            if (doubleValue > Float.MAX_VALUE)                throw new IllegalArgumentException("the value is bigger than Float.MAX_VALUE");            if (doubleValue < Float.MIN_VALUE)                throw new IllegalArgumentException("the value is smaller than Float.MIN_VALUE");            return value.floatValue();        }        if (targetType.equals(Double.class)) {            return targetType.cast(new Double(value.doubleValue()));        }               // BigDecimal        if (targetType.equals(BigDecimal.class)) {            if (value instanceof Float || value instanceof Double) {                return targetType.cast(new BigDecimal(value.toString()));            } else if (value instanceof BigInteger) {                return targetType.cast(new BigDecimal((BigInteger)value));            } else if (value instanceof BigDecimal) {                return targetType.cast(new BigDecimal(value.toString()));            } else {                return targetType.cast(BigDecimal.valueOf(value.longValue()));            }        }             if (targetType.equals(BigInteger.class)) {            if (value instanceof BigDecimal) {                return targetType.cast(((BigDecimal)value).toBigInteger());            } else {                return targetType.cast(BigInteger.valueOf(value.longValue()));            }        }                throw new IllegalArgumentException("can't convert from " + sourceType.getName() +" to " + targetType.getName()+" and the value is "+value);    }   private Number toNumber(final Class<?> sourceType, final Class<? extends Number> targetType, final String value){        // Byte        if (targetType.equals(Byte.class)) {            return new Byte(value);        }                        // Short        if (targetType.equals(Short.class)) {            return new Short(value);        }        // Integer        if (targetType.equals(Integer.class)) {            return new Integer(value);        }        // Long        if (targetType.equals(Long.class)) {            return new Long(value);        }                        // Float        if (targetType.equals(Float.class)) {            return new Float(value);        }        // Double        if (targetType.equals(Double.class)) {            return new Double(value);        }        // BigDecimal        if (targetType.equals(BigDecimal.class)) {            return new BigDecimal(value);        }                        // BigInteger        if (targetType.equals(BigInteger.class)) {            return new BigInteger(value);        }        throw new IllegalArgumentException("can't convert from " + sourceType.getName() +" to " + targetType.getName()+" and the value is "+value);    }       }
public class IntegerConverter extends NumberConverter {    @Override    protected Class<?> getTargetClass() {        return Integer.class;    }}
public class FloatConverter  extends NumberConverter {    @Override    protected Class<?> getTargetClass() {        return Float.class;    }}

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消