Jelajahi Sumber

增加基类、cglib实体扩展工具、数据类型转换工具

yucheng 4 tahun lalu
induk
melakukan
e024b751e4

+ 1 - 1
fm-common/src/main/java/com/persagy/fm/common/helper/ExecutorHelper.java

@@ -85,7 +85,7 @@ public final class ExecutorHelper {
             return;
         }
         ThreadPoolTaskExecutor poolTaskExecutor = SpringHelper.getBean(
-                SpringHelper.getProperty("threadpool.name", "threadPoolTaskExecutor"), ThreadPoolTaskExecutor.class);
+                SpringHelper.getString("threadpool.name", "threadPoolTaskExecutor"), ThreadPoolTaskExecutor.class);
         if (poolTaskExecutor != null) {
             executor = poolTaskExecutor.getThreadPoolExecutor();
         } else {

+ 91 - 6
fm-common/src/main/java/com/persagy/fm/common/helper/SpringHelper.java

@@ -1,11 +1,17 @@
 package com.persagy.fm.common.helper;
 
 import cn.hutool.extra.spring.SpringUtil;
+import com.persagy.fm.common.utils.TypeConvertUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.context.ApplicationContext;
 
 import java.util.Map;
 
+/**
+ * Spring助手
+ * @author Charlie Yu
+ * @version 1.0 2021-03-02
+ */
 public class SpringHelper {
 
     /**
@@ -56,13 +62,92 @@ public class SpringHelper {
     }
 
     /**
-     * 获取配置
-     * @param key 配置标识
-     * @param defaultValue 默认值
-     * @return
+     * 根据配置名称取得字符串配置值(配置名形式为nodeName.nodeName)
+     * @param key 配置名称
+     * @return 指定配置字符串值
      */
-    public static String getProperty(String key, String defaultValue) {
-        String value = SpringUtil.getProperty(key);
+    public static String getString(String key) {
+        return SpringUtil.getProperty(key);
+    }
+
+    /**
+     * 根据配置名称取得字符串配置值,如果配置值为空使用指定的默认值
+     * @param key         配置名称
+     * @param defaultValue 指定默认值
+     * @return 最终配置值
+     */
+    public static String getString(String key, String defaultValue) {
+        String value = getString(key);
         return StringUtils.isBlank(value) ? defaultValue : value;
     }
+
+    /**
+     * 根据配置名称取得整型配置值,如果配置值为空使用指定的默认值
+     * @param key         配置名称
+     * @param defaultValue 默认整型值
+     * @return 最终配置值
+     */
+    public static int getInt(String key, int defaultValue) {
+        String value = getString(key);
+        if (StringUtils.isEmpty(value)) {
+            return defaultValue;
+        }
+        return TypeConvertUtil.parseInt(value);
+    }
+    /**
+     * 根据配置名称取得布尔配置值,如果配置值为空使用指定的默认值
+     * @param key         配置名称
+     * @param defaultValue 默认布尔值
+     * @return 最终配置值
+     */
+    public static boolean getBoolean(String key, boolean defaultValue) {
+        String value = getString(key);
+        if (StringUtils.isEmpty(value)) {
+            return defaultValue;
+        }
+        return TypeConvertUtil.parseBoolean(value);
+    }
+
+    /**
+     * 根据配置名称取得长整型配置值,如果配置值为空使用指定的默认值
+     * @param key         配置名称
+     * @param defaultValue 默认长整型值
+     * @return 最终配置值
+     */
+    public static long getLong(String key, long defaultValue) {
+        String value = getString(key);
+        if (StringUtils.isEmpty(value)) {
+            return defaultValue;
+        }
+        return TypeConvertUtil.parseLong(value);
+    }
+
+    /**
+     * 根据配置名称取得浮点型配置值,如果配置值为空使用指定的默认值
+     * @param key         配置名称
+     * @param defaultValue 默认浮点型值
+     * @return 最终配置值
+     */
+    public static float getFloat(String key, float defaultValue) {
+        String value = getString(key);
+        if (StringUtils.isEmpty(value)) {
+            return defaultValue;
+        }
+        return TypeConvertUtil.parseFloat(value);
+    }
+
+    /**
+     * 根据配置名称取得双浮点型配置值,如果配置值为空使用指定的默认值
+     * @param key         配置名称
+     * @param defaultValue 默认双浮点型值
+     * @return 最终配置值
+     */
+    public static double getDouble(String key, double defaultValue) {
+        String value = getString(key);
+        if (StringUtils.isEmpty(value)) {
+            return defaultValue;
+        }
+        return TypeConvertUtil.parseDouble(value);
+    }
+
 }

+ 55 - 0
fm-common/src/main/java/com/persagy/fm/common/model/entity/AuditableEntity.java

@@ -0,0 +1,55 @@
+package com.persagy.fm.common.model.entity;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 审计信息父类
+ * @author Charlie Yu
+ * @version 1.0 2021-03-04
+ */
+@Data
+public abstract class AuditableEntity extends BaseEntity implements IAuditableEntity {
+
+    /** 序列id */
+    private static final long serialVersionUID = -6039076670318997447L;
+
+    /** 创建时间 */
+    public static final String PROP_CREATIONTIME = "creationTime";
+
+    /** 创建人 */
+    public static final String PROP_CREATOR = "creator";
+
+    /** 最后一次修改时间 */
+    public static final String PROP_MODIFIEDTIME = "modifiedTime";
+
+    /** 最后一个修改人 */
+    public static final String PROP_MODIFIER = "modifier";
+
+    /**
+     * 创建时间
+     */
+    @JsonIgnore
+    protected Date creationTime;
+
+    /**
+     * 创建人
+     */
+    @JsonIgnore
+    protected String creator;
+
+    /**
+     * 最后一次修改时间
+     */
+    @JsonIgnore
+    protected Date modifiedTime;
+
+    /**
+     * 最后一次修改人
+     */
+    @JsonIgnore
+    protected String modifier;
+
+}

+ 91 - 0
fm-common/src/main/java/com/persagy/fm/common/model/entity/BaseEntity.java

@@ -0,0 +1,91 @@
+package com.persagy.fm.common.model.entity;
+
+import lombok.AccessLevel;
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 实体基类
+ * @author Charlie Yu
+ * @version 1.0 2021-03-04
+ */
+@Data
+public abstract class BaseEntity implements IBaseEntity,Serializable,Cloneable{
+
+	/** 序列id */
+	private static final long serialVersionUID = -3231114188611235386L;
+
+	/** 实体属性主键id */
+	public final static String PROP_ID = "id";
+
+	/** 实体属性版本 */
+	public final static String PROP_TS = "ts";
+
+	/** 实体属性实体状态 */
+	public final static String PROP_VALID = "valid";
+
+	/** hash码 */
+	@Getter(AccessLevel.NONE)
+	@Setter(AccessLevel.NONE)
+	private int hashCode = Integer.MIN_VALUE;
+
+	/** 实体类必须有的属性 */
+	protected String id;
+
+	/** 时间戳 */
+	protected Date ts;
+
+	/** 实体状态 - 有效标识 */
+	protected int valid;
+
+	@Override
+	public boolean equals (Object obj) {
+		if (null == obj) {
+            return false;
+        }
+		if (!(obj instanceof BaseEntity)) {
+			return false;
+		} else {
+			BaseEntity entity = (BaseEntity) obj;
+			if (null == this.getId() || null == entity.getId()) {
+				return false;
+			} else {
+				return (this.getId().equals(entity.getId()));
+			}
+		}
+	}
+
+	@Override
+	public int hashCode () {
+		if (Integer.MIN_VALUE != this.hashCode) {
+			return this.hashCode;
+		}
+		if (null == this.getId()) {
+			return super.hashCode();
+		}
+		String hashStr = this.getClass().getName() + ":" + this.getId().hashCode();
+		this.hashCode = hashStr.hashCode();
+		return this.hashCode;
+	}
+
+	@Override
+	public int compareTo (IBaseEntity obj) {
+		if (obj.hashCode() > hashCode()) {
+			return 1;
+		} else if (obj.hashCode() < hashCode()) {
+			return -1;
+		} else {
+			return 0;
+		}
+	}
+
+	@Override
+	public Object clone() throws CloneNotSupportedException {
+		return super.clone();
+	}
+
+}

+ 59 - 0
fm-common/src/main/java/com/persagy/fm/common/model/entity/IAuditableEntity.java

@@ -0,0 +1,59 @@
+package com.persagy.fm.common.model.entity;
+
+import java.util.Date;
+
+/**
+ * 审计信息类接口
+ * @author Charlie Yu
+ * @version 1.0 2021-03-04
+ */
+public interface IAuditableEntity extends IBaseEntity{
+
+	/**
+	 * 取得创建时间
+	 * @return 创建时间
+	 */
+	Date getCreationTime();
+
+	/**
+	 * 设置创建时间,记录插入时有效
+	 * @param creationtime 创建时间
+	 */
+	void setCreationTime(Date creationtime);
+
+	/**
+	 * 取得创建实体的操作员的登录名
+	 * @return 操作员标识
+	 */
+	String getCreator() ;
+
+	/**
+	 * 设置创建实体的操作员标识,记录插入时有效
+	 * @param creator 操作员标识
+	 */
+	void setCreator(String creator);
+
+	/**
+	 * 取得最后修改时间.
+	 * @return 最后修改时间
+	 */
+	Date getModifiedTime();
+
+	/**
+	 * 设置最后修改时间.记录更新时有效
+	 * @param modifiedtime 最后修改时间
+	 */
+	void setModifiedTime(Date modifiedtime);
+
+	/**
+	 * 取得最后修改的操作员的登录名.
+	 * @return 操作员的登录名.
+	 */
+	String getModifier();
+
+	/**
+	 * 设置最后修改的操作员的登录名,记录更新时有效
+	 * @param modifier 操作员的登录名.
+	 */
+	void setModifier(String modifier);
+}

+ 49 - 0
fm-common/src/main/java/com/persagy/fm/common/model/entity/IBaseEntity.java

@@ -0,0 +1,49 @@
+package com.persagy.fm.common.model.entity;
+
+
+import java.util.Date;
+
+/**
+ * 基础实体接口
+ * @author Charlie Yu
+ * @version 1.0 2021-03-04
+ */
+public interface IBaseEntity extends Comparable<IBaseEntity>{
+
+	/**
+	 * 取得实体主键
+	 * @return 实体主键
+	 */
+	String getId();
+
+	/**
+	 * 设置实体主键
+	 * @param id 实体主键
+	 */
+	void setId(String id);
+
+	/**
+	 * 取得时间戳
+	 * @return 时间戳
+	 */
+	Date getTs();
+
+	/**
+	 * 设置时间戳
+	 * @param ts 时间戳
+	 */
+	void setTs(Date ts);
+
+	/**
+	 * 取得实体状态
+	 * @return 实体状态
+	 */
+	int getValid();
+
+	/**
+	 * 设置实体状态
+	 * @param status 实体状态
+	 */
+	void setValid(int status);
+	
+}

+ 36 - 0
fm-common/src/main/java/com/persagy/fm/common/model/entity/ITreeEntity.java

@@ -0,0 +1,36 @@
+package com.persagy.fm.common.model.entity;
+
+/**
+ * 树形接口
+ * @author Charlie Yu
+ * @version 1.0 2021-03-04
+ */
+public interface ITreeEntity extends IBaseEntity {
+
+    /** 实体属性树形编码 */
+    String PROP_INNERCODE = "innercode";
+
+    /**
+     * 取得树形编码
+     * @return 树形编码
+     */
+    String getInnercode();
+
+    /**
+     * 设置树形编码
+     * @param innercode 设置树形编码
+     */
+    void setInnercode(String innercode);
+
+    /**
+     * 取得innercode属性名
+     * @return
+     */
+    String getInnercodeField();
+
+    /**
+     * 取得当前实体表名
+     * @return 表名
+     */
+    String getTreeTableName();
+}

+ 127 - 0
fm-common/src/main/java/com/persagy/fm/common/utils/ProxyBeanUtil.java

@@ -0,0 +1,127 @@
+package com.persagy.fm.common.utils;
+
+import org.springframework.cglib.beans.BeanGenerator;
+import org.springframework.cglib.beans.BeanMap;
+
+import java.util.Map;
+
+/**
+ * 动态bean处理工具类
+ * @author Charlie Yu
+ * @version 1.0 2021-03-03
+ */
+public class ProxyBeanUtil {
+
+    /**
+     * 创建Bean生成器
+     * @param source 原始Bean
+     * @param properties 附加属性
+     * @return Bean生成器
+     */
+    public static BeanGenerator createBeanGenerator(Object source, String... properties) {
+        BeanMap sourceMap = BeanMap.create(source);
+        return createBeanGenerator(sourceMap,properties);
+    }
+
+    /**
+     * 创建Bean生成器
+     * @param source 原始Bean
+     * @param propertyMap 附加属性
+     * @return Bean生成器
+     */
+    public static BeanGenerator createBeanGenerator(Object source, Map<String, Class<?>> propertyMap) {
+        BeanMap sourceMap = BeanMap.create(source);
+        return createBeanGenerator(sourceMap,propertyMap);
+    }
+
+    /**
+     * 创建Bean生成器
+     * @param sourceMap 原始Bean对应beanMap
+     * @param properties 附加属性
+     * @return Bean生成器
+     */
+    public static BeanGenerator  createBeanGenerator(BeanMap sourceMap, String... properties) {
+        BeanGenerator generator = new BeanGenerator();
+        generator.setSuperclass(sourceMap.getBean().getClass());
+        int count = 0;
+        for (String prop : properties) {
+            if(sourceMap.containsKey(prop)) {
+                continue;
+            }
+            generator.addProperty(prop,String.class);
+            count++;
+        }
+        if(count  == 0) {
+            return null;
+        }
+        return generator;
+    }
+
+    /**
+     * 创建Bean生成器
+     * @param sourceMap 原始Bean对应beanMap
+     * @param propertyMap 附加属性
+     * @return Bean生成器
+     */
+    public static BeanGenerator  createBeanGenerator(BeanMap sourceMap, Map<String, Class<?>> propertyMap) {
+        BeanGenerator generator = new BeanGenerator();
+        generator.setSuperclass(sourceMap.getBean().getClass());
+        int count = 0;
+        for (Map.Entry<String,Class<?>> entry:propertyMap.entrySet()) {
+            String key = entry.getKey();
+            if (sourceMap.containsKey(key)) {
+                continue;
+            }
+            generator.addProperty(key, entry.getValue());
+            count++;
+        }
+        if(count  == 0) {
+            return null;
+        }
+        return generator;
+    }
+
+    /**
+     * 创建继承于原始Bean的新对象
+     * @param source 原始Bean
+     * @param properties 附加属性
+     * @return 新对象
+     */
+    public static <X> X  createProxyBean(X source, String... properties) {
+        BeanGenerator generator = createBeanGenerator(source,properties);
+        if(generator == null) {
+            return source;
+        }
+        return createProxyBean(generator,source);
+    }
+
+    /**
+     * 创建继承于原始Bean的新对象
+     * @param source 原始Bean
+     * @param propertyMap 附加属性
+     * @return 新对象
+     */
+    public static <X> X  createProxyBean(X source, Map<String, Class<?>> propertyMap) {
+        BeanGenerator generator = createBeanGenerator(source,propertyMap);
+        if(generator == null) {
+            return source;
+        }
+        return createProxyBean(generator,source);
+    }
+
+    /**
+     * 抽取的公共方法
+     * @param generator 新的bean生成器
+     * @param source 复制扩展源对象
+     * @param <X> 源类型
+     * @return 新对象
+     */
+    private static <X> X createProxyBean(BeanGenerator generator,X source){
+        BeanMap sourceMap = BeanMap.create(source);
+        @SuppressWarnings("unchecked")
+        X target = (X) generator.create();
+        BeanMap targetMap = BeanMap.create(target);
+        targetMap.putAll(sourceMap);
+        return target;
+    }
+}

+ 330 - 0
fm-common/src/main/java/com/persagy/fm/common/utils/TypeConvertUtil.java

@@ -0,0 +1,330 @@
+package com.persagy.fm.common.utils;
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+
+import java.math.BigDecimal;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * 数据类型转换器
+ * @author Charlie Yu
+ * @version 1.0 2021-03-03
+ */
+@Slf4j
+public class TypeConvertUtil {
+
+    /**
+     * 私有构造方法,防止实例化
+     */
+    private TypeConvertUtil() {
+
+    }
+
+
+    /**
+     * 将Object对象解析成字符串类型
+     * @param obj 需要转换的对象
+     * @return 字符串
+     */
+    public static final String parseString(Object obj) {
+        if (obj == null) {
+            return null;
+        }
+        return obj.toString();
+    }
+
+    /**
+     * 将对象解析成字节类型
+     * @param obj 需要转换的对象
+     * @return 字节值
+     */
+    public static final byte parseByte(Object obj) {
+        if (obj == null) {
+            return 0;
+        }
+        if (obj instanceof Number) {
+            return ((Number) obj).byteValue();
+        }
+        if (obj instanceof Boolean) {
+            return (byte) (((Boolean) obj).booleanValue() ? 1 : 0);
+        }
+        String s;
+        if ("".equals(s = obj.toString())) {
+            return 0;
+        } else {
+            return Byte.parseByte(s);
+        }
+    }
+
+    /**
+     * 将对象解析成字节类型
+     * @param obj 需要转换的对象
+     * @return 字节值
+     */
+    public static final short parseShort(Object obj) {
+        if (obj == null) {
+            return 0;
+        }
+        if (obj instanceof Number) {
+            return ((Number) obj).shortValue();
+        }
+        if (obj instanceof Boolean) {
+            return (short) (((Boolean) obj).booleanValue() ? 1 : 0);
+        }
+        String s;
+        if ("".equals(s = obj.toString())) {
+            return 0;
+        } else {
+            return Short.parseShort(s);
+        }
+    }
+
+    /**
+     * 将对象解析成整数类型
+     * @param obj 需转换的对象
+     * @return 整数值
+     */
+    public static final int parseInt(Object obj) {
+        if (obj == null) {
+            return 0;
+        }
+        if (obj instanceof Number) {
+            return ((Number) obj).intValue();
+        }
+        if (obj instanceof Boolean) {
+            return !((Boolean) obj).booleanValue() ? 0 : 1;
+        }
+        String s;
+        if ("".equals(s = obj.toString())) {
+            return 0;
+        } else {
+            return Integer.parseInt(s);
+        }
+    }
+
+    /**
+     * 将对象解析成长整类型
+     * @param obj 需转换的对象
+     * @return 长整数值
+     */
+    public static final long parseLong(Object obj) {
+        if (obj == null) {
+            return 0;
+        }
+        if (obj instanceof Number) {
+            return ((Number) obj).longValue();
+        }
+        if (obj instanceof Boolean) {
+            return !((Boolean) obj).booleanValue() ? 0L : 1L;
+        }
+        if (obj instanceof Date) {
+            return ((Date) obj).getTime();
+        }
+        String s;
+        if ("".equals(s = obj.toString())) {
+            return 0;
+        } else {
+            return Long.parseLong(s);
+        }
+    }
+
+    /**
+     * 将对象解析成布尔类型数据
+     * @param obj 需转换的对象
+     * @return 布尔值
+     */
+    public static final boolean parseBoolean(Object obj) {
+        if (obj == null) {
+            return false;
+        }
+        if (obj instanceof Boolean) {
+            return ((Boolean) obj).booleanValue();
+        } else {
+            String s = obj.toString();
+            return "true".equalsIgnoreCase(s) || "1".equals(s) || "Y".equalsIgnoreCase(s) || "YES".equalsIgnoreCase(s);
+        }
+    }
+
+    /**
+     * 将对象解析成浮点型数据
+     * @param obj 需转换的对象
+     * @return 浮点数值
+     */
+    public static final float parseFloat(Object obj) {
+        if (obj == null) {
+            return 0.0f;
+        }
+        if (obj instanceof Number) {
+            return ((Number) obj).floatValue();
+        }
+        if (obj instanceof Boolean) {
+            return !((Boolean) obj).booleanValue() ? 0.0F : 1.0F;
+        }
+        String s;
+        if ("".equals(s = obj.toString())) {
+            return 0.0f;
+        } else {
+            return Float.parseFloat(s);
+        }
+    }
+
+    /**
+     * 将对象解析成双浮点型数据
+     * @param obj 需转换的对象
+     * @return 双浮点值
+     */
+    public static final double parseDouble(Object obj) {
+        if (obj == null) {
+            return 0.0d;
+        }
+        if (obj instanceof Number) {
+            return ((Number) obj).doubleValue();
+        }
+        if (obj instanceof Boolean) {
+            return !((Boolean) obj).booleanValue() ? 0.0D : 1.0D;
+        }
+        String s;
+        if ("".equals(s = obj.toString())) {
+            return 0.0d;
+        } else {
+            return Double.parseDouble(s);
+        }
+    }
+
+    /**
+     * 解析对象成大数字类型数据
+     * @param obj 需要转换的对象
+     * @return 大数字对象
+     */
+    public static final BigDecimal parseBigDecimal(Object obj) {
+        if (obj == null) {
+            return BigDecimal.valueOf(0L);
+        }
+        if (obj instanceof BigDecimal) {
+            return (BigDecimal) obj;
+        }
+        if (obj instanceof Number) {
+            return BigDecimal.valueOf(((Number) obj).doubleValue());
+        }
+        if (obj instanceof Boolean) {
+            return BigDecimal.valueOf(((Boolean) obj).booleanValue() ? 1L : 0L);
+        }
+        String s;
+        if ("".equals(s = obj.toString())) {
+            return BigDecimal.valueOf(0L);
+        } else {
+            return new BigDecimal(s);
+        }
+    }
+
+    /**
+     * 解析对象成日期数据类型
+     *
+     * @param obj 需转换的对象
+     * @return 日期对象
+     */
+    public static Date parseDate(Object obj) {
+        if (obj == null) {
+            return null;
+        }
+        if (obj instanceof Date) {
+            return (Date) obj;
+        }
+        if (obj instanceof Number) {
+            return new Date(((Number) obj).longValue());
+        }
+        String objString = String.valueOf(obj);
+        if (StringUtils.isBlank(objString)) {
+            return null;
+        }
+        if (isNumeric(objString)) {
+            long time = Long.parseLong(objString);
+            return new Date(time);
+        }
+        int len = objString.length();
+        if (len >= 19) {
+            return null;
+        }
+        boolean isDate = objString.indexOf("-") > 0;
+        boolean isTime = objString.indexOf(":") > 0;
+        try {
+            if (isDate && isTime) {
+                return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(objString);
+            }
+            if (isDate) {
+                return new SimpleDateFormat("yyyy-MM-dd").parse(objString);
+            }
+            if (isTime) {
+                return new SimpleDateFormat("HH:mm:ss").parse(objString);
+            }
+        } catch (ParseException e) {
+            log.error("TypeConvert parse: Date parse error", e);
+        }
+        return null;
+    }
+
+    /**
+     * 将未知类型的对象转换成指定类型的对象
+     * @param clazz 数据类型
+     * @param obj  未知类型对象
+     * @return 目标类型对象
+     */
+    public static final Object translate(Class clazz, Object obj) {
+        if (clazz == null) {
+            return null;
+        }
+        if (clazz.equals(String.class)) {
+            return parseString(obj);
+        }
+        if (clazz.equals(Integer.TYPE) ||
+                clazz.equals(Integer.class)) {
+            return parseInt(obj);
+        }
+        if (clazz.equals(Long.TYPE) || clazz.equals(Long.class)) {
+            return parseLong(obj);
+        }
+        if (clazz.equals(BigDecimal.class)) {
+            return parseBigDecimal(obj);
+        }
+        if (clazz.equals(Float.TYPE) || clazz.equals(Float.class)) {
+            return parseFloat(obj);
+        }
+        if (clazz.equals(Double.TYPE) || clazz.equals(Double.class)) {
+            return parseDouble(obj);
+        }
+        if (clazz.equals(Boolean.TYPE) || clazz.equals(Boolean.class)) {
+            return parseBoolean(obj);
+        }
+        if (clazz.equals(Date.class) || clazz.equals(java.sql.Date.class) ||
+                clazz.equals(java.sql.Time.class) || clazz.equals(java.sql.Timestamp.class)) {
+            return parseDate(obj);
+        }
+        if (clazz.equals(Byte.TYPE) || clazz.equals(Byte.class)) {
+            return parseByte(obj);
+        }
+        if (clazz.equals(Short.TYPE) || clazz.equals(Short.class)) {
+            return parseShort(obj);
+        }
+        return obj;
+    }
+
+    /**
+     * 判断字符串是否是有效的数组
+     * @param s 需要判断的字符串
+     * @return 布尔值
+     */
+    public static boolean isNumeric(String s) {
+        int length = s.length();
+        for (int i = 0; i < length; i++) {
+            char c = s.charAt(i);
+            boolean isNumberChar = (c < '0' || c > '9') && c != '.' && (i != 0 || c != '-');
+            if (isNumberChar) {
+                return false;
+            }
+        }
+        return true;
+    }
+}