net.linksfield.cube.partnersdk.utils.ClassUtils Maven / Gradle / Ivy
package net.linksfield.cube.partnersdk.utils;
import java.io.Closeable;
import java.io.Externalizable;
import java.io.Serializable;
import java.lang.reflect.Array;
import java.util.*;
/**
* @ClassName ClassUtils
* @Description 从Spring的ClassUtils精简
* @Author James.hu
* @Date 2023/3/14
**/
public abstract class ClassUtils {
private static final Map, Class>> primitiveWrapperTypeMap = new IdentityHashMap(9);
private static final Map, Class>> primitiveTypeToWrapperMap = new IdentityHashMap(9);
private static final Map> primitiveTypeNameMap = new HashMap(32);
private static final Map> commonClassCache = new HashMap(64);
private static final Set> javaLanguageInterfaces;
static {
primitiveWrapperTypeMap.put(Boolean.class, Boolean.TYPE);
primitiveWrapperTypeMap.put(Byte.class, Byte.TYPE);
primitiveWrapperTypeMap.put(Character.class, Character.TYPE);
primitiveWrapperTypeMap.put(Double.class, Double.TYPE);
primitiveWrapperTypeMap.put(Float.class, Float.TYPE);
primitiveWrapperTypeMap.put(Integer.class, Integer.TYPE);
primitiveWrapperTypeMap.put(Long.class, Long.TYPE);
primitiveWrapperTypeMap.put(Short.class, Short.TYPE);
primitiveWrapperTypeMap.put(Void.class, Void.TYPE);
Iterator primitiveIterator = primitiveWrapperTypeMap.entrySet().iterator();
while(primitiveIterator.hasNext()) {
Map.Entry, Class>> entry = (Map.Entry)primitiveIterator.next();
primitiveTypeToWrapperMap.put(entry.getValue(), entry.getKey());
registerCommonClasses((Class)entry.getKey());
}
Set> primitiveTypes = new HashSet<>(32);
primitiveTypes.addAll(primitiveWrapperTypeMap.values());
Collections.addAll(primitiveTypes, boolean[].class, byte[].class, char[].class, double[].class, float[].class, int[].class, long[].class, short[].class);
// primitiveTypes.add(boolean[].class);
Iterator primitiveTypesIterator = primitiveTypes.iterator();
while(primitiveTypesIterator.hasNext()) {
Class> primitiveType = (Class)primitiveTypesIterator.next();
primitiveTypeNameMap.put(primitiveType.getName(), primitiveType);
}
registerCommonClasses(Boolean[].class, Byte[].class, Character[].class, Double[].class, Float[].class, Integer[].class, Long[].class, Short[].class);
registerCommonClasses(Number.class, Number[].class, String.class, String[].class, Class.class, Class[].class, Object.class, Object[].class);
registerCommonClasses(Throwable.class, Exception.class, RuntimeException.class, Error.class, StackTraceElement.class, StackTraceElement[].class);
registerCommonClasses(Enum.class, Iterable.class, Iterator.class, Enumeration.class, Collection.class, List.class, Set.class, Map.class, Map.Entry.class, Optional.class);
Class>[] javaLanguageInterfaceArray = new Class[]{Serializable.class, Externalizable.class, Closeable.class, AutoCloseable.class, Cloneable.class, Comparable.class};
registerCommonClasses(javaLanguageInterfaceArray);
javaLanguageInterfaces = new HashSet(Arrays.asList(javaLanguageInterfaceArray));
}
private static void registerCommonClasses(Class>... commonClasses) {
Class[] var1 = commonClasses;
int var2 = commonClasses.length;
for (int var3 = 0; var3 < var2; ++var3) {
Class> clazz = var1[var3];
commonClassCache.put(clazz.getName(), clazz);
}
}
public static ClassLoader getDefaultClassLoader() {
ClassLoader cl = null;
try {
cl = Thread.currentThread().getContextClassLoader();
} catch (Throwable var3) {
}
if (cl == null) {
cl = ClassUtils.class.getClassLoader();
if (cl == null) {
try {
cl = ClassLoader.getSystemClassLoader();
} catch (Throwable var2) {
}
}
}
return cl;
}
public static Class> forName(String name, ClassLoader classLoader) throws ClassNotFoundException, LinkageError {
Class> clazz = resolvePrimitiveClassName(name);
if (clazz == null) {
clazz = (Class) commonClassCache.get(name);
}
if (clazz != null) {
return clazz;
} else {
Class elementClass;
String elementName;
if (name.endsWith("[]")) {
elementName = name.substring(0, name.length() - "[]".length());
elementClass = forName(elementName, classLoader);
return Array.newInstance(elementClass, 0).getClass();
} else if (name.startsWith("[L") && name.endsWith(";")) {
elementName = name.substring("[L".length(), name.length() - 1);
elementClass = forName(elementName, classLoader);
return Array.newInstance(elementClass, 0).getClass();
} else if (name.startsWith("[")) {
elementName = name.substring("[".length());
elementClass = forName(elementName, classLoader);
return Array.newInstance(elementClass, 0).getClass();
} else {
ClassLoader clToUse = classLoader;
if (classLoader == null) {
clToUse = getDefaultClassLoader();
}
try {
return Class.forName(name, false, clToUse);
} catch (ClassNotFoundException var9) {
int lastDotIndex = name.lastIndexOf(46);
if (lastDotIndex != -1) {
String nestedClassName = name.substring(0, lastDotIndex) + '$' + name.substring(lastDotIndex + 1);
try {
return Class.forName(nestedClassName, false, clToUse);
} catch (ClassNotFoundException var8) {
}
}
throw var9;
}
}
}
}
public static boolean isPresent(String className, ClassLoader classLoader) {
try {
forName(className, classLoader);
return true;
} catch (IllegalAccessError var3) {
throw new IllegalStateException("Readability mismatch in inheritance hierarchy of class [" + className + "]: " + var3.getMessage(), var3);
} catch (Throwable var4) {
return false;
}
}
public static Class> resolvePrimitiveClassName(String name) {
Class> result = null;
if (name != null && name.length() <= 7) {
result = (Class)primitiveTypeNameMap.get(name);
}
return result;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy