一、获取类中泛型的实际类型
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);
}
}
}