package cn.enilu.flash.utils;
import cn.enilu.flash.utils.cache.exception.ToolBoxException;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.nio.charset.Charset;
import java.text.NumberFormat;
import java.util.Date;
import java.util.Set;
/**
* 类型转换器
*
* @author xiaoleilu
*
*/
public class Convert {
private Convert() {
// 静态类不可实例化
}
/**
* 强制转换类型
*
* @param clazz 被转换成的类型
* @param value 需要转换的对象
* @return 转换后的对象
*/
public static Object parse(Class<?> clazz, Object value) {
try {
if (clazz.isAssignableFrom(String.class)) {
// ----2016-12-19---zhuangqian----防止beetlsql对空字符串不检测导致无法入库的问题----
if (StringUtils.isEmpty(String.valueOf(value))) {
return " ";
}
else {
return String.valueOf(value);
}
}
return clazz.cast(value);
} catch (ClassCastException e) {
String valueStr = String.valueOf(value);
Object result = parseBasic(clazz, valueStr);
if (result != null) {
return result;
}
if (Date.class.isAssignableFrom(clazz)) {
// 判断标准日期
// ----2016-11-24---zhuangqian----需要加toDate(),不然beetlsql转换date类型的时候会报错----
return DateTimeKit.parse(valueStr).toDate();
} else if (clazz == BigInteger.class) {
// 数学计算数字
return new BigInteger(valueStr);
} else if (clazz == BigDecimal.class) {
// 数学计算数字
return new BigDecimal(valueStr);
} else if (clazz == byte[].class) {
// 流,由于有字符编码问题,在此使用系统默认
return valueStr.getBytes();
}
// 未找到可转换的类型,返回原值
return (StringUtils.isEmpty(valueStr)) ? null : value;
}
}
/**
* 转换基本类型<br>
* 将字符串转换为原始类型或包装类型
*
* @param clazz 转换到的类,可以是原始类型类,也可以是包装类型类
* @param valueStr 被转换的字符串
* @return 转换后的对象,如果非基本类型,返回null
*/
public static Object parseBasic(Class<?> clazz, String valueStr) {
if (null == clazz || null == valueStr) {
return null;
}
if (StringUtils.isEmpty(valueStr)){ return null;}
BasicType basicType = null;
try {
basicType = BasicType.valueOf(clazz.getSimpleName().toUpperCase());
} catch (Exception e) {
// 非基本类型数据
return null;
}
switch (basicType) {
case BYTE:
if (clazz == byte.class) {
return Byte.parseByte(valueStr);
}
return Byte.valueOf(valueStr);
case SHORT:
if (clazz == short.class) {
return Short.parseShort(valueStr);
}
return Short.valueOf(valueStr);
case INT:
return Integer.parseInt(valueStr);
case INTEGER:
return Integer.valueOf(valueStr);
case LONG:
if (clazz == long.class) {
return new BigDecimal(valueStr).longValue();
}
return Long.valueOf(valueStr);
case DOUBLE:
if (clazz == double.class) {
return new BigDecimal(valueStr).doubleValue();
}
case FLOAT:
if (clazz == float.class) {
return Float.parseFloat(valueStr);
}
return Float.valueOf(valueStr);
case BOOLEAN:
if (clazz == boolean.class) {
return Boolean.parseBoolean(valueStr);
}
return Boolean.valueOf(valueStr);
case CHAR:
return valueStr.charAt(0);
case CHARACTER:
return Character.valueOf(valueStr.charAt(0));
default:
return null;
}
}
/**
* 转换为字符串<br>
* 如果给定的值为null,或者转换失败,返回默认值<br>
* 转换失败不会报错
*
* @param value 被转换的值
* @param defaultValue 转换错误时的默认值
* @return 结果
*/
public static String toStr(Object value, String defaultValue) {
if (null == value) {
return defaultValue;
}
if (value instanceof String) {
return (String) value;
} else if (CollectionKit.isArray(value)) {
return CollectionKit.toString(value);
}
return value.toString();
}
/**
* 转换为字符串<br>
* 如果给定的值为<code>null</code>,或者转换失败,返回默认值<code>null</code><br>
* 转换失败不会报错
*
* @param value 被转换的值
* @return 结果
*/
public static String toStr(Object value) {
return toStr(value, null);
}
/**
* 转换为字符<br>
* 如果给定的值为null,或者转换失败,返回默认值<br>
* 转换失败不会报错
*
* @param value 被转换的值
* @param defaultValue 转换错误时的默认值
* @return 结果
*/
public static Character toChar(Object value, Character defaultValue) {
if (null == value) {
return defaultValue;
}
if (value instanceof Character) {
return (Character) value;
}
final String valueStr = toStr(value, null);
return StringUtils.isEmpty(valueStr) ? defaultValue : valueStr.charAt(0);
}
/**
* 转换为字符<br>
* 如果给定的值为<code>null</code>,或者转换失败,返回默认值<code>null</code><br>
* 转换失败不会报错
*
* @param value 被转换的值
* @return 结果
*/
public static Character toChar(Object value) {
return toChar(value, null);
}
/**
* 转换为byte<br>
* 如果给定的值为<code>null</code>,或者转换失败,返回默认值<br>
* 转换失败不会报错
*
* @param value 被转换的值
* @param defaultValue 转换错误时的默认值
* @return 结果
*/
public static Byte toByte(Object value, Byte defaultValue) {
if (value == null) {
return defaultValue;
}
if (value instanceof Byte) {
return (Byte) value;
}
if (value instanceof Number) {
return ((Number) value).byteValue();
}
final String valueStr = toStr(value, null);
if (StringUtils.isEmpty(valueStr)) {
return defaultValue;
}
try {
return Byte.parseByte(valueStr);
} catch (Exception e) {
return defaultValue;
}
}
/**
* 转换为byte<br>
* 如果给定的值为<code>null</code>,或者转换失败,返回默认值<code>null</code><br>
* 转换失败不会报错
*
* @param value 被转换的值
* @return 结果
*/
public static Byte toByte(Object value) {
return toByte(value, null);
}
/**
* 转换为Short<br>
* 如果给定的值为<code>null</code>,或者转换失败,返回默认值<br>
* 转换失败不会报错
*
* @param value 被转换的值
* @param defaultValue 转换错误时的默认值
* @return 结果
*/
public static Short toShort(Object value, Short defaultValue) {
if (value == null) {
return defaultValue;
}
if (value instanceof Short) {
return (Short) value;
}
if (value instanceof Number) {
return ((Number) value).shortValue();
}
final String valueStr = toStr(value, null);
if (StringUtils.isEmpty(valueStr)) {
return defaultValue;
}
try {
return Short.parseShort(valueStr.trim());
} catch (Exception e) {
return defaultValue;
}
}
/**
* 转换为Short<br>
* 如果给定的值为<code>null</code>,或者转换失败,返回默认值<code>null</code><br>
* 转换失败不会报错
*
* @param value 被转换的值
* @return 结果
*/
public static Short toShort(Object value) {
return toShort(value, null);
}
/**
* 转换为Number<br>
* 如果给定的值为空,或者转换失败,返回默认值<br>
* 转换失败不会报错
*
* @param value 被转换的值
* @param defaultValue 转换错误时的默认值
* @return 结果
*/
public static Number toNumber(Object value, Number defaultValue) {
if (value == null) {
return defaultValue;
}
if (value instanceof Number) {
return (Number) value;
}
final String valueStr = toStr(value, null);
if (StringUtils.isEmpty(valueStr)) {
return defaultValue;
}
try {
return NumberFormat.getInstance().parse(valueStr);
} catch (Exception e) {
return defaultValue;
}
}
/

振华OPPO
- 粉丝: 46w+
最新资源
- LeadingThink_digital-city-tutorial_20824_1755584885067.zip
- 报废车拆解全流程智能管理系统_报废车回收拆解企业专用ERP软件_包含验收入库拆解管理销售管理库存核对统计报表等核心功能_适用于报废机动车回收拆解企业的全流程数字化管理_采用宏达数据.zip
- 基于Linux内核的开源操作系统项目_包含系统内核开发_驱动程序编写_命令行工具集_图形界面优化_文件系统管理_网络协议栈实现_安全模块加固_性能调优工具_虚拟化支持_容器化技术_.zip
- 【工业自动化】基于C#与MX Component控件实现三菱PLC软元件数据读写的三种方法及应用:包含通信设置、仿真PLC操作与FX1S PLC的实际读写控制了文档的核心内容
- 城市路灯智能运维管理系统是一款专为市政管理部门和物业公司设计的综合性路灯管理平台_包含路灯基本信息登记_巡查记录管理_月度报修汇总_检修复验记录_按报修类型统计分析_电表信息管.zip
- 财政票据管理系统_非税收入票据全流程管理软件_专为各级财政部门设计的综合性票据管理平台_包含票据入库销毁发售退回作废缴验等全生命周期管理功能_支持多维度票据查询统计报表_实现票据领.zip
- 1265578519_kernel_13092_1755583630789.zip
- 交通客运车辆综合管理系统_长途客运短途客运公交车出租车校车旅游车通勤车营运登记车辆技术参数变更等级评定二维维修驾驶员考核事故违章进出站年审保险预警管理_用于交通局全面管理各类客运车.zip
- VlsyV_Multi-Core-Experiment_29388_1755583690707.zip
- shan-liangguang_Project_7244_1755583691730.zip
- 擦鞋修鞋店全流程智能管理系统_专为擦鞋修鞋行业设计的会员管理消费统计库存管理员工考勤一体化解决方案_包含基础信息设置会员卡充值客户预定消费产品进出库服务消费统计报表等核心功能_采用.zip
- cz0729zc_4G_Monitoring_System_for_Train_Noise_13092_1755584900220.zip
- wangguoshuang_Book-Pricing-System-Based-on-Python-3-V10_13092_1755584908612.zip
- wangguoshuang_Book-Pricing-System-Based-on-Python-3-V20_20824_1755584907574.zip
- 沙石料运输全流程信息化管理系统_针对沙石厂销售运输业务开发的综合管理平台_包含现金出库单挂账出库单押金出库单油料管理应收应付账款管理员工考核租赁登记等核心功能_采用宏达.zip
- 基于Vuejs框架开发的电子班牌后台管理系统_支持LED显示屏内容管理与实时更新_包含班级信息展示_课表管理_通知公告_考勤统计_校园文化宣传_多媒体内容播放_远程控制_多终端适.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈


