如果兩個類希望互相呼叫成員變數或成員函式
阿新 • • 發佈:2018-12-03
如果希望在類A中使用類B的成員變數或成員函式。那麼有兩種方法:
1.類A和類B相互引用
典型例子是MVP,在View中建立Presenter,建立時View將自己傳入
class Activity{ Presenter mPresenter; public Activity(){ mPresenter = new Presenter(this); } } class Presenter{ Activity activity; public Presenter(Activity activity){ this.activity = activity; } }
2.如果兩個類相互包含引用,這兩個類就耦合得太緊了。還可以用繫結得方法。
典型的例子是Activity和Service,在Service中建立內部類操作Service,想辦法讓Activity拿到Service的這個內部類的物件。可以通過回撥函式的方式拿到
class Service(){ int a; public void fun(){} // 內部類Binder可以隨意使用外部類的成員變數和成員函式 class Binder(){ public int getA(){ return a; } public void fun(){ fun(); } } public onCreate(CallbackClass callbackClass){ Binder binder = new Binder(); callbackClass.callbackFun(binder); } }
class Activity{ // Activity只要持有了Service的Binder物件,就可以操作Service了! public Service.Service binder; // 通過Service的回撥函式拿到Service的binder class CallbackClass(){ public callbackFun(Service.Binder binder){ Activity.this.binder = binder; } } public void fun(){ startService(intent, binder) } }