mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-05-09 23:51:34 +08:00
add object creator
This commit is contained in:
parent
dbcf9eb3f3
commit
fd7123ae31
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user