All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.weicoder.common.lang.Conversion Maven / Gradle / Ivy

package com.weicoder.common.lang;

import java.math.BigDecimal;
import java.util.Arrays;

import com.weicoder.common.constants.StringConstants;
import com.weicoder.common.util.EmptyUtil;
import com.weicoder.common.util.MathUtil;

/**
 * 数据类型转换,对null和异常进行处理
 * @author WD
 */
public final class Conversion {
	/**
	 * 转换dest到src同类型
	 * @param obj 要转换的对象
	 * @param c 要转换的类型
	 * @return 转换后的对象
	 */
	public static Object to(Object obj, Class c) {
		// 判断类型
		if (c == null)
			return obj;
		if (String.class == c)
			return toString(obj);
		if (Integer.class == c || int.class == c)
			return toInt(obj);
		if (Long.class == c || long.class == c)
			return toLong(obj);
		if (Float.class == c || float.class == c)
			return toFloat(obj);
		if (Double.class == c || double.class == c)
			return toDouble(obj);
		if (Short.class == c || short.class == c)
			return toShort(obj);
		if (Byte.class == c || byte.class == c)
			return toByte(obj);
		if (BigDecimal.class == c)
			return toBigDecimal(obj);
		if (Boolean.class == c || boolean.class == c)
			return toBoolean(obj);
		// 返回原类型
		return obj;
	}

	/**
	 * 转换Object到字符串,如果参数为null返回"",否则返回obj.toString().trim()
	 * @param obj 要转换为字符串的对象
	 * @return 转换后的字符串
	 */
	public static String toString(Object obj) {
		return toString(obj, StringConstants.EMPTY);
	}

	/**
	 * 转换Object到字符串,如果参数为null返回str,否则返回obj.toString().trim()
	 * @param obj 要转换为字符串的对象
	 * @param defaultValue 默认值
	 * @return 转换后的字符串
	 */
	public static String toString(Object obj, String defaultValue) {
		return EmptyUtil.isEmpty(obj) ? defaultValue : obj instanceof Object[] ? Arrays.toString(((Object[]) obj)).trim() : obj.toString().trim();
	}

	/**
	 * 转换Object为int,obj必须为能转换成int的对象,如果转换失败将返回0
	 * @param obj 要转换的对象
	 * @return 转换后的数字
	 */
	public static int toInt(Object obj) {
		return toInt(obj, 0);
	}

	/**
	 * 转换Object为int,obj必须为能转换成int的对象,如果转换失败将返回i
	 * @param obj 要转换的对象
	 * @param defaultValue 默认值
	 * @return 转换后的数字
	 */
	public static int toInt(Object obj, int defaultValue) {
		try {
			// 判断对象类型
			if (EmptyUtil.isEmpty(obj))
				return defaultValue;
			if (obj.getClass().isArray())
				return toInt(((Object[]) obj)[0], defaultValue);
			if (obj instanceof Number)
				return ((Number) obj).intValue();
			if (obj instanceof Boolean)
				return ((Boolean) obj).booleanValue() ? 1 : 0;
			if (obj instanceof Character)
				return ((Character) obj).charValue();
			return MathUtil.add(obj).intValue();
		} catch (RuntimeException e) {
			return defaultValue;
		}
	}

	/**
	 * 转换Object为long,obj必须为能转换成long的对象,如果转换失败将返回0
	 * @param obj 要转换的对象
	 * @return 转换后的数字
	 */
	public static long toLong(Object obj) {
		return toLong(obj, 0);
	}

	/**
	 * 转换Object为long,obj必须为能转换成long的对象,如果转换失败将返回num
	 * @param obj 要转换的对象
	 * @param defaultValue 默认值
	 * @return 转换后的数字
	 */
	public static long toLong(Object obj, long defaultValue) {
		try {
			// 判断对象类型
			if (EmptyUtil.isEmpty(obj))
				return defaultValue;
			if (obj instanceof Number)
				// Number
				return ((Number) obj).longValue();
			if (obj instanceof Boolean)
				// Boolean
				return ((Boolean) obj).booleanValue() ? 1 : 0;
			if (obj instanceof Character)
				return ((Character) obj).charValue();
			return MathUtil.add(obj).longValue();
		} catch (RuntimeException e) {
			return defaultValue;
		}
	}

	/**
	 * 转换Object为float,obj必须为能转换成float的对象,如果转换失败将返回0
	 * @param obj 要转换的对象
	 * @return 转换后的数字
	 */
	public static float toFloat(Object obj) {
		return toFloat(obj, 0);
	}

	/**
	 * 转换Object为float,obj必须为能转换成float的对象,如果转换失败将返回num
	 * @param obj 要转换的对象
	 * @param defaultValue 默认值
	 * @return 转换后的数字
	 */
	public static float toFloat(Object obj, float defaultValue) {
		try {
			// 判断对象类型
			if (EmptyUtil.isEmpty(obj))
				return defaultValue;
			if (obj instanceof Number)
				// Number
				return ((Number) obj).floatValue();
			if (obj instanceof String)
				// String
				return Float.parseFloat(obj.toString());
			if (obj instanceof Boolean)
				// Boolean
				return ((Boolean) obj).booleanValue() ? 1 : 0;
			if (obj instanceof Character)
				return ((Character) obj).charValue();
			// 普通对象 转换成String 在返回
			return Float.parseFloat(toString(obj));
		} catch (RuntimeException e) {
			return defaultValue;
		}
	}

	/**
	 * 转换Object为double,obj必须为能转换成double的对象,如果转换失败将返回0
	 * @param obj 要转换的对象
	 * @return 转换后的数字
	 */
	public static double toDouble(Object obj) {
		return toDouble(obj, 0);
	}

	/**
	 * 转换Object为double,obj必须为能转换成double的对象,如果转换失败将返回num
	 * @param obj 要转换的对象
	 * @param defaultValue 默认值
	 * @return 转换后的数字
	 */
	public static double toDouble(Object obj, double defaultValue) {
		try {
			// 判断对象类型
			if (EmptyUtil.isEmpty(obj))
				return defaultValue;
			if (obj instanceof Number)
				// Number
				return ((Number) obj).doubleValue();
			if (obj instanceof String)
				// String
				return Double.parseDouble(obj.toString());
			if (obj instanceof Boolean)
				// Boolean
				return ((Boolean) obj).booleanValue() ? 1 : 0;
			if (obj instanceof Character)
				return ((Character) obj).charValue();
			// 普通对象 转换成String 在返回
			return Double.parseDouble(toString(obj));
		} catch (RuntimeException e) {
			return defaultValue;
		}
	}

	/**
	 * 转换Object为short,obj必须为能转换成short的对象,如果转换失败将返回0
	 * @param obj 要转换的对象
	 * @return 转换后的数字
	 */
	public static short toShort(Object obj) {
		return toShort(obj, (short) 0);
	}

	/**
	 * 转换Object为short,obj必须为能转换成short的对象,如果转换失败将返回num
	 * @param obj 要转换的对象
	 * @param defaultValue 默认值
	 * @return 转换后的数字
	 */
	public static short toShort(Object obj, short defaultValue) {
		try {
			// 判断对象类型
			if (EmptyUtil.isEmpty(obj))
				return defaultValue;
			if (obj instanceof Number)
				// Number
				return ((Number) obj).shortValue();
			if (obj instanceof String)
				// String
				return Short.parseShort(obj.toString());
			if (obj instanceof Boolean)
				// Boolean
				return (short) (((Boolean) obj).booleanValue() ? 1 : 0);
			if (obj instanceof Character)
				return (short) (((Character) obj).charValue());
			// 普通对象 转换成String 在返回
			return Short.parseShort(toString(obj));
		} catch (RuntimeException e) {
			return defaultValue;
		}
	}

	/**
	 * 转换Object为byte,obj必须为能转换成byte的对象,如果转换失败将返回0
	 * @param obj 要转换的对象
	 * @return 转换后的数字
	 */
	public static byte toByte(Object obj) {
		return toByte(obj, (byte) 0);
	}

	/**
	 * 转换Object为byte,obj必须为能转换成byte的对象,如果转换失败将返回num
	 * @param obj 要转换的对象
	 * @param defaultValue 默认值
	 * @return 转换后的数字
	 */
	public static byte toByte(Object obj, byte defaultValue) {
		try {
			// 判断对象类型
			if (EmptyUtil.isEmpty(obj))
				return defaultValue;
			if (obj instanceof Number)
				// Number
				return ((Number) obj).byteValue();
			if (obj instanceof String)
				// String
				return Byte.parseByte(obj.toString());
			if (obj instanceof Boolean)
				// Boolean
				return (byte) (((Boolean) obj).booleanValue() ? 1 : 0);
			if (obj instanceof Character)
				return (byte) (((Character) obj).charValue());
			// 普通对象 转换成String 在返回
			return Byte.parseByte(toString(obj));
		} catch (RuntimeException e) {
			return defaultValue;
		}
	}

	/**
	 * 转换Object为byte,obj必须为能转换成byte的对象,如果转换失败将返回0
	 * @param obj 要转换的对象
	 * @return 转换后的数字
	 */
	public static BigDecimal toBigDecimal(Object obj) {
		return toBigDecimal(obj, BigDecimal.ZERO);
	}

	/**
	 * 转换Object为byte,obj必须为能转换成byte的对象,如果转换失败将返回num
	 * @param obj 要转换的对象
	 * @param defaultValue 默认值
	 * @return 转换后的数字
	 */
	public static BigDecimal toBigDecimal(Object obj, BigDecimal defaultValue) {
		try {
			// 判断对象类型
			if (EmptyUtil.isEmpty(obj))
				return defaultValue;
			if (obj instanceof BigDecimal)
				// String
				return (BigDecimal) obj;
			if (obj instanceof Long || obj instanceof Integer)
				// Long Integer
				return BigDecimal.valueOf(toLong(obj));
			if (obj instanceof Double || obj instanceof Float)
				// Double Float
				return BigDecimal.valueOf(toDouble(obj));
			if (obj instanceof String)
				// String
				return new BigDecimal(obj.toString());
			if (obj instanceof Boolean)
				// Boolean
				return ((Boolean) obj).booleanValue() ? BigDecimal.ONE : BigDecimal.ZERO;
			if (obj instanceof Character)
				return new BigDecimal(((Character) obj).charValue());
			// 普通对象 转换成String 在返回
			return new BigDecimal(toString(obj));
		} catch (RuntimeException e) {
			return defaultValue;
		}
	}

	/**
	 * 转换Object为boolean 转换失败或不能转换返回 false
	 * @param obj 转换为boolean的对象
	 * @return true false
	 */
	public static boolean toBoolean(Object obj) {
		return toBoolean(obj, false);
	}

	/**
	 * 转换Object为boolean 转换失败或不能转换返回 defaultValue
	 * @param obj 转换为boolean的对象
	 * @param defaultValue 默认值
	 * @return true false
	 */
	public static boolean toBoolean(Object obj, boolean defaultValue) {
		try {
			// 判断类型
			if (EmptyUtil.isEmpty(obj))
				return defaultValue;
			if (obj instanceof Boolean)
				// Boolean
				return ((Boolean) obj).booleanValue();
			if (obj instanceof String) {
				// String
				String is = obj.toString().trim();
				return obj == null ? defaultValue : "true".equalsIgnoreCase(is) || "yes".equalsIgnoreCase(is) || "ok".equalsIgnoreCase(is);
			}
			if (obj instanceof Number)
				// Number
				return ((Number) obj).intValue() > 0 ? true : false;
			// 其它类型先转换成String 在转成Boolean
			return Boolean.parseBoolean(toString(obj));
		} catch (RuntimeException e) {
			return defaultValue;
		}
	}

	/**
	 * 如果str等于""返回null,否则返回它本身
	 * @param str 要对比的字符串
	 * @return 比较后的字符串
	 */
	public static String stringToNull(String str) {
		return stringToNull(str, StringConstants.EMPTY);
	}

	/**
	 * 如果str等于eq返回null,否则返回它本身
	 * @param str 要对比的字符串
	 * @param eq 对比字符串
	 * @return 比较后的字符串
	 */
	public static String stringToNull(String str, String eq) {
		return toString(eq).equals(str) ? null : str;
	}

	private Conversion() {}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy