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();
} }
BasicConverter 基本数据类型转换器的更多相关文章
- SpringMVC框架——自定义数据类型转换器
Spring MVC 框架的 Converter<S,T> 是一个可以将一种数据类型转换成另一种数据类型的接口,这里 S 表示源类型,T 表示目标类型. 开发中如果需要自定义数据类型转换时 ...
- springMVC-自定义数据类型转换器
自定义类型转换器 201603005,今天想了一个问题,Spring中的Conventer是如何实现的,因为他没有绑定类中的属性,它怎么知道要将那个String转换?看了几遍的书也没有找到,后来想想, ...
- java中常用数据类型转换器
/** * 把String转换成long * * @param src 要转换的String * @param def 转换失败时返回此值 * @return 转换好的long */ public s ...
- Behave用户自定义数据类型
在step句子中, 所有的参数默认是string类型, 如果用户想使用复杂的或者其他数据类型, 就需要了解以下bahave中的数据类型. behave的数据类型转换器是在parse和cfparse中支 ...
- jQuery.ajax(url,[settings])
概述 通过 HTTP 请求加载远程数据. jQuery 底层 AJAX 实现.简单易用的高层实现见 $.get, $.post 等.$.ajax() 返回其创建的 XMLHttpRequest 对象. ...
- 关于Jquery中ajax介绍
jQuery 底层 AJAX 实现.简单易用的高层实现见 $.get, $.post 等.$.ajax() 返回其创建的 XMLHttpRequest 对象.大多数情况下你无需直接操作该函数,除非你需 ...
- Gson简要使用笔记
最近在做一个java web service项目,需要用到jason,本人对java不是特别精通,于是开始搜索一些java平台的json类库. 发现了google的gson,因为之前对于protoco ...
- 使用Gson送解析Json格式
Java bean: package com.jingle.a; public class Person { public String name; public int age; public Pe ...
- JSON数据解析(GSON方式) (转)
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种理想的数据交换格式. 在上一篇博文<Andro ...
随机推荐
- The C compiler identification is unknown解决办法
环境:VS2015,CMake3.12.0. 问题一: 解决办法:下载并安装Windows SDK version 8.1. 问题二: 解决办法:这个问题百度了半天也没找到合适的办法,好多博客都是复制 ...
- SQL Server-执行计划教会我如何创建索引
先说点废话 以前有 DBA 在身边的时候,从来不曾考虑过数据库性能的问题,但是,当一个应用程序从头到脚都由自己完成,而且数据库面对的是接近百万的数据,看着一个页面加载速度像乌龟一样,自己心里真是有种挫 ...
- STL 小白学习(3) vector
#include <iostream> using namespace std; #include <vector> void printVector(vector<in ...
- STL 小白学习(1) 初步认识
#include <iostream> using namespace std; #include <vector> //动态数组 #include <algorithm ...
- java虚拟机之虚拟机类加载机制
此处主要需要知道什么是java虚拟机?java虚拟机如何进行类加载的? java语言本身是编译型和解释型的语言,先对本地的java文件进行编译,编译后会在本地生成一个class文件,而这个生成的cla ...
- Hadoop & Spark
Hadoop & Spark 概述 Apache Hadoop 是一种通过服务集群并使用MapReduce编程数据模型完成大数据的分布式处理框架,核心模块包括:MapReduce,Hadoop ...
- Page 对象详解
Page 对象 由于网页编译后所创建的类由Page派生而来,因此网页可以直接使用Page对象的属性.方法和事件. Page对象的常用属性 1.IsPostBack(bool类型) 获取一个值,该值指示 ...
- 剑指Offer 20. 包含min函数的栈 (栈)
题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 题目地址 https://www.nowcoder.com/practice/4c77 ...
- TCP/IP笔记(1)
TCP/IP 背景和介绍 上世纪 70 年代,随着计算机技术的发展,计算机使用者意识到:要想发挥计算机更大的作用,就要将世界各地的计算机连接起来.但是简单的连接是远远不够的,因为计算机之间无法沟通.因 ...
- Linux下常用工具
GUI篇 计算器gnome-calculator pdf阅读envince 虚拟机virtualbox vnc tigervnc-server and client 网络连接network-manag ...