ProxyImplクラス

パッケージcom.test.mvp.mvpdemo.mvp.v7.proxy。

輸入com.test.mvp.mvpdemo.mvp.v7.basemvp.BasePresenter。
輸入com.test.mvp.mvpdemo.mvp.v7.basemvp.IBaseView。
輸入com.test.mvp.mvpdemo.mvp.v7.inject.InjectPresenter。
インポートをjava.lang.reflect.Field;
輸入はjava.util.ArrayList;
輸入はjava.util.List;

パブリッククラスProxyImplはIProxy {実装

プライベートIBaseView MVIEWを。
プライベートリスト<BasePresenter> mInjectPresenters。

公共ProxyImpl(IBaseViewビュー){
this.mView =図です。
mInjectPresenters =新しいArrayListを<>();
}

@SuppressWarnings({ "未チェック"、 "TryWithIdenticalCatches"})
@Override
公共ボイドbindPresenter(){
//获得已经申明的变量、包括私有的
フィールド[]フィールド= mView.getClass()getDeclaredFields()。
(項目フィールド:フィールド)のために{
//获取变量上面的注解类型
InjectPresenter injectPresenter = field.getAnnotation(InjectPresenter.class)。
(injectPresenter!= null)の場合には{
{しようと
、クラスを<?BasePresenter> =入力延びfield.getType()(?<クラスBasePresenterは>延び);
BasePresenter mInjectPresenter = type.newInstance()。
mInjectPresenter.attach(MVIEW)。
field.setAccessible(真の);
field.set(MVIEW、mInjectPresenter)。
mInjectPresenters.add(mInjectPresenter)。
}キャッチ(IllegalAccessExceptionが電子){
e.printStackTrace();
}キャッチ(ないInstantiationException電子){
e.printStackTrace();
}キャッチ(れるClassCastException E){
e.printStackTrace();
;:新しいのRuntimeExceptionをスロー(「BasePresenterサブクラス必見クラス拡張します」)
}
}
}
}

@Override
公共ボイドunbindPresenter(){
/ **
*解绑、避免内存泄漏
* /
(BasePresenterプレゼンター:mInjectPresenters)用{
presenter.detach()。
}
mInjectPresenters.clear()。
mInjectPresenters = NULL;
}
}
--------------------- 

おすすめ

転載: www.cnblogs.com/ly570/p/11299108.html