java根据数组类获取类名以及根据数组类字符串获取数组类

7 篇文章 0 订阅
/**
 * <h1>参数类型</h1>
 *
 * @author: dengyw
 * @date: 2020/6/13 21:20
 */
private enum ParamType {

   VOID(void.class, "void"),
   BOOLEAN(boolean.class , "boolean"),
   CHAR(char.class, "char"),
   BYTE(byte.class, "byte"),
   SHORT(short.class, "short"),
   INT(int.class, "int"),
   FLOAT(float.class, "float"),
   LONG(long.class, "long"),
   DOUBLE(double.class, "double");

   public final Class<?> typeClazz;

   public final String typeString;

   ParamType(Class<?> typeClazz, String typeString) {
      this.typeClazz = typeClazz;
      this.typeString = typeString;
   }
}

private final static Map<Class<?>, String> JAVA_TYPES = new HashMap();

private final static Map<String, Class<?>> JAVA_CLASS_TYPES = new HashMap();

static {
   for(ParamType paramType: ParamType.values()){
      JAVA_TYPES.put(paramType.typeClazz, paramType.typeString);
      JAVA_CLASS_TYPES.put(paramType.typeString, paramType.typeClazz);
   }
}

/**
 * <h1>根据字符串获取class</h1>
 * @param className 当为数组时类名类似:int[], java.lang.Long[][]
 * @return java.lang.Class<T>
 * @date 2020/6/19 13:01
 * @author dengyw
 */
public final static <T> Class<T> getClassByString(String className) throws ClassNotFoundException {
   int firstIndex = className.indexOf("[");
   int count = 0;
   int index = firstIndex;
   while (index != -1) {
      count++;// 找到一次统计一次
      index = className.indexOf("[", index + 1);
   }
   Class<?> arrayClazz;
   if(count > 0){
      String arrayBaseClassName = className.substring(0, firstIndex);
      int[] dimensions = new int[count];
      arrayClazz = Array.newInstance(getTypeClass(arrayBaseClassName), dimensions).getClass();
   } else {
      arrayClazz = getTypeClass(className);
   }
   return (Class<T>) arrayClazz;
}

private final static Class<?> getTypeClass(String className) throws ClassNotFoundException {
   Class<?> clazz = JAVA_CLASS_TYPES.get(className);
   if(ObjectUtils.isNull(clazz)){
      clazz = ClassUtils.getClassByClassName(className);
   }
   return clazz;
}


/**
 * <h1>通过迭代方式获取typeClazz类型字符串</h1>
 * 当数组类型时:int[], java.lang.Long[][]
 * @param typeClazz
 * @return java.lang.String[]
 * @date 2020/6/19 19:08
 * @author dengyw
 */public final static String getClassStringByClass(Class<?> typeClazz) {
    StringBuilder stringBuilder = new StringBuilder();
    if (typeClazz.isArray()) {
        stringBuilder.append(getClassStringByClass(typeClazz.getComponentType())).append("[]");
    } else {
        String paramType = JAVA_TYPES.get(typeClazz);
        if (paramType == null) {
            stringBuilder.append(typeClazz.getName());
        } else {
            stringBuilder.append(paramType);
        }
    }
    return stringBuilder.toString();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值