in core/src/main/java/com/alibaba/fastjson2/util/TypeUtils.java [2787:2980]
public static Class loadClass(String className) {
if (className.length() >= 192) {
return null;
}
switch (className) {
case "O":
case "Object":
case "java.lang.Object":
return Object.class;
case "java.util.Collections$EmptyMap":
return Collections.emptyMap().getClass();
case "java.util.Collections$EmptyList":
return Collections.emptyList().getClass();
case "java.util.Collections$EmptySet":
return Collections.emptySet().getClass();
case "java.util.Optional":
return Optional.class;
case "java.util.OptionalInt":
return OptionalInt.class;
case "java.util.OptionalLong":
return OptionalLong.class;
case "List":
case "java.util.List":
return List.class;
case "A":
case "ArrayList":
case "java.util.ArrayList":
return ArrayList.class;
case "LA":
case "LinkedList":
case "java.util.LinkedList":
return LinkedList.class;
case "Map":
case "java.util.Map":
return Map.class;
case "M":
case "HashMap":
case "java.util.HashMap":
return HashMap.class;
case "LM":
case "LinkedHashMap":
case "java.util.LinkedHashMap":
return LinkedHashMap.class;
case "ConcurrentHashMap":
return ConcurrentHashMap.class;
case "ConcurrentLinkedQueue":
return ConcurrentLinkedQueue.class;
case "ConcurrentLinkedDeque":
return ConcurrentLinkedDeque.class;
case "JSONObject":
return JSONObject.class;
case "JO1":
className = "com.alibaba.fastjson.JSONObject";
break;
case "Set":
case "java.util.Set":
return Set.class;
case "HashSet":
case "java.util.HashSet":
return HashSet.class;
case "LinkedHashSet":
case "java.util.LinkedHashSet":
return LinkedHashSet.class;
case "TreeSet":
case "java.util.TreeSet":
return TreeSet.class;
case "java.lang.Class":
return Class.class;
case "java.lang.Integer":
return Integer.class;
case "java.lang.Long":
return Long.class;
case "String":
case "java.lang.String":
return String.class;
case "[String":
return String[].class;
case "I":
case "int":
return int.class;
case "S":
case "short":
return short.class;
case "J":
case "long":
return long.class;
case "Z":
case "boolean":
return boolean.class;
case "B":
case "byte":
return byte.class;
case "F":
case "float":
return float.class;
case "D":
case "double":
return double.class;
case "C":
case "char":
return char.class;
case "[B":
case "byte[]":
return byte[].class;
case "[S":
case "short[]":
return short[].class;
case "[I":
case "int[]":
return int[].class;
case "[J":
case "long[]":
return long[].class;
case "[F":
case "float[]":
return float[].class;
case "[D":
case "double[]":
return double[].class;
case "[C":
case "char[]":
return char[].class;
case "[Z":
case "boolean[]":
return boolean[].class;
case "[O":
return Object[].class;
case "UUID":
return UUID.class;
case "Date":
return Date.class;
case "Calendar":
return Calendar.class;
case "java.io.IOException":
return java.io.IOException.class;
case "java.util.Collections$UnmodifiableRandomAccessList":
return CLASS_UNMODIFIABLE_LIST;
case "java.util.Arrays$ArrayList":
return Arrays.asList(1).getClass();
case "java.util.Collections$SingletonList":
return CLASS_SINGLE_LIST;
case "java.util.Collections$SingletonSet":
return CLASS_SINGLE_SET;
default:
break;
}
Class mapping = TYPE_MAPPINGS.get(className);
if (mapping != null) {
return mapping;
}
if (className.startsWith("java.util.ImmutableCollections$")) {
try {
return Class.forName(className);
} catch (ClassNotFoundException e) {
return CLASS_UNMODIFIABLE_LIST;
}
}
if (className.charAt(0) == 'L' && className.charAt(className.length() - 1) == ';') {
className = className.substring(1, className.length() - 1);
}
if (className.charAt(0) == '[' || className.endsWith("[]")) {
String itemClassName = className.charAt(0) == '[' ? className.substring(1) : className.substring(0, className.length() - 2);
Class itemClass = loadClass(itemClassName);
if (itemClass == null) {
throw new JSONException("load class error " + className);
}
return Array.newInstance(itemClass, 0).getClass();
}
ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
if (contextClassLoader != null) {
try {
return contextClassLoader.loadClass(className);
} catch (ClassNotFoundException ignored) {
}
}
try {
return JSON.class.getClassLoader().loadClass(className);
} catch (ClassNotFoundException ignored) {
}
try {
return Class.forName(className);
} catch (ClassNotFoundException ignored) {
}
return null;
}