|
|
@@ -1,9 +1,11 @@
|
|
|
package com.miekir.mvp.presenter;
|
|
|
|
|
|
-import com.miekir.mvp.model.IModel;
|
|
|
+import com.miekir.mvp.model.BaseModel;
|
|
|
import com.miekir.mvp.model.InjectModel;
|
|
|
|
|
|
+import java.lang.reflect.Constructor;
|
|
|
import java.lang.reflect.Field;
|
|
|
+import java.lang.reflect.InvocationTargetException;
|
|
|
import java.util.List;
|
|
|
|
|
|
/**
|
|
|
@@ -19,7 +21,7 @@ public class PresenterHelper {
|
|
|
/**
|
|
|
* 初始化添加注解的变量
|
|
|
*/
|
|
|
- public static void initModelList(List<IModel> progressModelList, List<IModel> backModelList, BasePresenter<?> presenter) {
|
|
|
+ public static void initModelList(List<BaseModel> progressModelList, List<BaseModel> backModelList, BasePresenter<?> presenter) {
|
|
|
progressModelList.clear();
|
|
|
// 这里可以获取到子类的成员变量
|
|
|
Field[] fields = presenter.getClass().getDeclaredFields();
|
|
|
@@ -33,15 +35,21 @@ public class PresenterHelper {
|
|
|
try {
|
|
|
field.setAccessible(true);
|
|
|
// 父类引用指向子类对象
|
|
|
- Class<IModel> type = (Class<IModel>) field.getType();
|
|
|
- IModel model = type.newInstance();
|
|
|
+ Class<BaseModel> type = (Class<BaseModel>) field.getType();
|
|
|
+
|
|
|
+ // 不带参数实例化BaseModel model = type.newInstance();
|
|
|
+ // 带参数的构造方法实例化
|
|
|
+ Class<?>[] parameterTypes = {BasePresenter.class};
|
|
|
+ Constructor<BaseModel> modelConstructor = type.getConstructor(parameterTypes);
|
|
|
+ BaseModel model = modelConstructor.newInstance(presenter);
|
|
|
field.set(presenter, model);
|
|
|
+
|
|
|
if (modelAnnotation.withProgress()) {
|
|
|
progressModelList.add(model);
|
|
|
} else {
|
|
|
backModelList.add(model);
|
|
|
}
|
|
|
- } catch (IllegalAccessException | InstantiationException e) {
|
|
|
+ } catch (IllegalAccessException | InstantiationException | NoSuchMethodException | InvocationTargetException e) {
|
|
|
e.printStackTrace();
|
|
|
} catch (ClassCastException e) {
|
|
|
e.printStackTrace();
|