/** * <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(); }
java根据数组类获取类名以及根据数组类字符串获取数组类
最新推荐文章于 2022-12-12 18:57:16 发布