add object creator

This commit is contained in:
Looly 2023-11-10 21:36:29 +08:00
parent dbcf9eb3f3
commit fd7123ae31

View File

@ -76,15 +76,10 @@ public class PossibleObjectCreator<T> implements ObjectCreator<T> {
return (T) ClassUtil.getPrimitiveDefaultValue(type); return (T) ClassUtil.getPrimitiveDefaultValue(type);
} }
// 某些特殊接口的实例化按照默认实现进行 // 处理接口和抽象类的默认值
if (type.isAssignableFrom(AbstractMap.class)) { type = (Class<T>) resolveType(type);
type = (Class<T>) HashMap.class;
} else if (type.isAssignableFrom(List.class)) {
type = (Class<T>) ArrayList.class;
} else if (type.isAssignableFrom(Set.class)) {
type = (Class<T>) HashSet.class;
}
// 尝试默认构造实例化
try { try {
return DefaultObjectCreator.of(type).create(); return DefaultObjectCreator.of(type).create();
} catch (final Exception e) { } catch (final Exception e) {
@ -102,6 +97,7 @@ public class PossibleObjectCreator<T> implements ObjectCreator<T> {
return (T) Array.newInstance(type.getComponentType(), 0); return (T) Array.newInstance(type.getComponentType(), 0);
} }
// 查找合适构造
final Constructor<T>[] constructors = ConstructorUtil.getConstructors(type); final Constructor<T>[] constructors = ConstructorUtil.getConstructors(type);
Class<?>[] parameterTypes; Class<?>[] parameterTypes;
for (final Constructor<T> constructor : constructors) { for (final Constructor<T> constructor : constructors) {
@ -118,4 +114,24 @@ public class PossibleObjectCreator<T> implements ObjectCreator<T> {
} }
return null; return null;
} }
/**
* 某些特殊接口的实例化按照默认实现进行
*
* @param type 类型
* @return 默认类型
*/
private static Class<?> resolveType(final Class<?> type) {
if (type.isAssignableFrom(AbstractMap.class)) {
return HashMap.class;
} else if (type.isAssignableFrom(List.class)) {
return ArrayList.class;
} else if (type == SortedSet.class) {
return TreeSet.class;
} else if (type.isAssignableFrom(Set.class)) {
return HashSet.class;
}
return type;
}
} }