Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

修改创建对象时优先使用无参构造器 #42

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 12 additions & 13 deletions library/src/com/litesuits/orm/db/utils/ClassUtil.java
Original file line number Diff line number Diff line change
@@ -1,17 +1,13 @@
package com.litesuits.orm.db.utils;

import android.annotation.TargetApi;
import android.os.Build;
import com.litesuits.orm.db.annotation.MapCollection;

import java.lang.reflect.Array;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.util.Arrays;
import java.util.Collection;
import java.util.Date;
import java.util.List;

/**
* 类工具
Expand All @@ -24,7 +20,7 @@ public class ClassUtil {
/**
* 判断类是否是基础数据类型
* 目前支持11种
* 在{@link com.litesuits.orm.db.utils.DataUtil#injectDataToObject} 中注入也有体现
* 在{@link DataUtil#injectDataToObject} 中注入也有体现
*/
public static boolean isBaseDataType(Class<?> clazz) {
return clazz.isPrimitive() || clazz.equals(String.class) || clazz.equals(Boolean.class)
Expand All @@ -35,7 +31,7 @@ public static boolean isBaseDataType(Class<?> clazz) {
}

/**
* 根据类获取对象:不再必须一个无参构造
* 根据类获取对象:不再必须一个无参构造,如果提供了无参构造,会优先调用
*/
public static <T> T newInstance(Class<T> claxx)
throws IllegalAccessException, InvocationTargetException, InstantiationException {
Expand All @@ -45,15 +41,18 @@ public static <T> T newInstance(Class<T> claxx)
if (cls.length == 0) {
c.setAccessible(true);
return (T) c.newInstance();
} else {
Object[] objs = new Object[cls.length];
for (int i = 0; i < cls.length; i++) {
objs[i] = getDefaultPrimiticeValue(cls[i]);
}
c.setAccessible(true);
return (T) c.newInstance(objs);
}
}
if (cons.length > 0) {
Constructor<?> c = cons[0];
Class[] cls = c.getParameterTypes();
Object[] objs = new Object[cls.length];
for (int i = 0; i < cls.length; i++) {
objs[i] = getDefaultPrimiticeValue(cls[i]);
}
c.setAccessible(true);
return (T) c.newInstance(objs);
}
return null;
}

Expand Down