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

com.jd.blockchain.utils.PrimitiveUtils Maven / Gradle / Ivy

The newest version!
package com.jd.blockchain.utils;

import java.util.HashMap;
import java.util.Map;

public class PrimitiveUtils {

	private static Map, Converter> converters = new HashMap, Converter>();

	static {
		converters.put(Boolean.class, new BooleanConverter());
		converters.put(boolean.class, new BooleanValueConverter());
		converters.put(Byte.class, new ByteConverter());
		converters.put(byte.class, new ByteValueConverter());
		converters.put(Character.class, new CharConverter());
		converters.put(char.class, new CharValueConverter());
		converters.put(Integer.class, new IntegerConverter());
		converters.put(int.class, new IntegerValueConverter());
		converters.put(Long.class, new LongConverter());
		converters.put(long.class, new LongValueConverter());
		converters.put(Double.class, new DoubleConverter());
		converters.put(double.class, new DoubleValueConverter());
		converters.put(Float.class, new FloatConverter());
		converters.put(float.class, new FloatValueConverter());
	}

	/**
	 * 判断指定的两个类型是否互为包装类;
	 * 
	 * @param type1 type1
	 * @param type2 type2
	 * @return boolean
	 */
	public static boolean isWrapping(Class type1, Class type2) {
		Converter converter = converters.get(type1);
		return converter != null && converter.isWrapping(type2);
	}

	/**
	 * 判断指定的类型是否是基本类型或者基本类型的包装类;
	 * 
	 * @param clazz clazz
	 * @return boolean
	 */
	public static boolean isPrimitiveType(Class clazz) {
		return converters.containsKey(clazz);
	}

	/**
	 * 返回指定类型的默认值;
	 * 
	 * 如果指定类型是原生类型,则返回默认的原始类型的值;否则,返回 null;
	 * 
	 * @param clazz clazz
	 * @return Object
	 */
	public static Object getDefaultValue(Class clazz) {
		Converter converter = converters.get(clazz);
		if (converter == null) {
			return null;
		}
		return converter.defaultValue();
	}

	/**
	 * 将指定的数据转为指定的类型;
* 如果指定的类型不是基本类型,则总是返回 null; * @param data data * @param clazz clazz * @param class * @return T */ @SuppressWarnings("unchecked") public static T castTo(Object data, Class clazz) { Converter converter = converters.get(clazz); if (converter == null) { return null; } return (T) converter.convert(data); } private static interface Converter { Object defaultValue(); Object convert(Object data); boolean isWrapping(Class type); } private static class BooleanConverter implements Converter { @Override public Object convert(Object data) { if (data == null) { return null; } if (data instanceof Boolean) { return (Boolean) data; } return Boolean.parseBoolean(data.toString()); } @Override public Object defaultValue() { return null; } @Override public boolean isWrapping(Class type) { return type == boolean.class || type == Boolean.class; } } private static class BooleanValueConverter extends BooleanConverter { @Override public Object convert(Object data) { Boolean value = (Boolean) super.convert(data); if (value == null) { return false; } return value; } @Override public Object defaultValue() { return false; } } private static class CharConverter implements Converter { @Override public Object convert(Object data) { if (data == null) { return null; } if (data instanceof Character) { return (char) ((Character) data).charValue(); } if (data instanceof Byte) { return (char) ((Byte) data).byteValue(); } if (data instanceof String) { String str = (String) data; if (str.length() == 1) { return str.charAt(0); } } throw new IllegalArgumentException("Cann't conver [" + data + "] to charater!"); } @Override public Object defaultValue() { return null; } @Override public boolean isWrapping(Class type) { return type == char.class || type == Character.class; } } private static class CharValueConverter extends CharConverter { @Override public Object convert(Object data) { Character value = (Character) super.convert(data); if (value == null) { throw new IllegalArgumentException("Cann't convert null charater to char!"); } return value; } @Override public Object defaultValue() { return (char) 0; } } private static class ByteConverter implements Converter { @Override public Object convert(Object data) { if (data == null) { return null; } if (data instanceof Byte) { return (int) ((Byte) data).byteValue(); } return Byte.parseByte(data.toString()); } @Override public Object defaultValue() { return null; } @Override public boolean isWrapping(Class type) { return type == byte.class || type == Byte.class; } } private static class ByteValueConverter extends ByteConverter { @Override public Object convert(Object data) { Byte value = (Byte) super.convert(data); if (value == null) { return Byte.valueOf((byte) 0); } return value; } @Override public Object defaultValue() { return (byte) 0; } } private static class IntegerConverter implements Converter { @Override public Object convert(Object data) { if (data == null) { return null; } if (data instanceof Integer) { return (Integer) data; } if (data instanceof Byte) { return ((Byte) data).intValue(); } return Integer.parseInt(data.toString()); } @Override public Object defaultValue() { return null; } @Override public boolean isWrapping(Class type) { return type == int.class || type == Integer.class; } } private static class IntegerValueConverter extends IntegerConverter { @Override public Object convert(Object data) { Integer value = (Integer) super.convert(data); if (value == null) { return 0; } return value; } @Override public Object defaultValue() { return (int) 0; } } private static class LongConverter implements Converter { @Override public Object convert(Object data) { if (data == null) { return null; } if (data instanceof Long) { return (Long) data; } if (data instanceof Integer) { return ((Integer) data).longValue(); } if (data instanceof Byte) { return ((Byte) data).longValue(); } return Long.parseLong(data.toString()); } @Override public Object defaultValue() { return null; } @Override public boolean isWrapping(Class type) { return type == long.class || type == Long.class; } } private static class LongValueConverter extends LongConverter { @Override public Object convert(Object data) { Long value = (Long) super.convert(data); if (value == null) { return Long.valueOf(0); } return value; } @Override public Object defaultValue() { return 0L; } } private static class DoubleConverter implements Converter { @Override public Object convert(Object data) { if (data == null) { return null; } if (data instanceof Double) { return (Double) data; } if (data instanceof Float) { return ((Float) data).doubleValue(); } if (data instanceof Long) { return ((Long) data).doubleValue(); } if (data instanceof Integer) { return ((Integer) data).doubleValue(); } if (data instanceof Byte) { return ((Byte) data).doubleValue(); } return Double.parseDouble(data.toString()); } @Override public Object defaultValue() { return null; } @Override public boolean isWrapping(Class type) { return type == double.class || type == Double.class; } } private static class DoubleValueConverter extends DoubleConverter { @Override public Object convert(Object data) { Long value = (Long) super.convert(data); if (value == null) { return Long.valueOf(0); } return value; } @Override public Object defaultValue() { return (double) 0; } } private static class FloatConverter implements Converter { @Override public Object convert(Object data) { if (data == null) { return null; } if (data instanceof Float) { return (Float) data; } if (data instanceof Long) { return ((Long) data).floatValue(); } if (data instanceof Integer) { return ((Integer) data).floatValue(); } if (data instanceof Byte) { return ((Byte) data).floatValue(); } return Float.parseFloat(data.toString()); } @Override public Object defaultValue() { return null; } @Override public boolean isWrapping(Class type) { return type == float.class || type == Float.class; } } private static class FloatValueConverter extends FloatConverter { private static final Float DEFAULT_FLOAT = Float.valueOf(0); @Override public Object convert(Object data) { Float value = (Float) super.convert(data); if (value == null) { return DEFAULT_FLOAT; } return value; } @Override public Object defaultValue() { return (float) 0; } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy