一、获取类中泛型的实际类型
public class GetGenericRealTypeUtil {
public static <T> T getT(Object o, int i) {
try {
return ((Class<T>) ((ParameterizedType) o.getClass()
.getGenericSuperclass())
.getActualTypeArguments()[i])
.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}catch (ClassCastException e){
e.printStackTrace();
}
return null;
}
}
public abstract class BaseActivity<P extends BasePresenter, M extends BaseModel> extends AppCompatActivity {
protected P mPresenter;
protected M mModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(getLayoutId());
mPresenter = GetGenericRealTypeUtil.getT(this, 0);
mModel = GetGenericRealTypeUtil.getT(this, 1);
if (this instanceof BaseView) {
mPresenter.setVM(this, mModel);
}
}
}