2

すべての対話の基本クラスで、いくつかの一般的なロジックといくつかのイベントへの反応を実装しようとしています。

また、EventBus で登録および登録解除し、基本クラスでいくつかのイベントをキャッチします。

したがって、派生クラスのインスタンスをインスタンス化しようとすると、EventBus は、DerivedClass に onEvent(*) のようなメソッドがないという例外をスローします。すべての派生クラスにいくつかのスタブ onEvent メソッドを追加したくありません。これはソフトウェア開発のあり方ではありません。

継承に関してそのようなアプローチを使用する方法がないとしたら、それはとても悲しいことです。

誰かがそれに直面しましたか?

4

2 に答える 2

1

EvenBus を登録する前に、(必要に応じて) 子クラスでオーバーライドできる基本クラスで保護されたメソッド (または抽象メソッドを持つ抽象クラス) を作成できます。

public class Test extends Fragment{

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if(doIneedEventBus()){
            EventBus.getDefault().register(this);
        }
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        if(doIneedEventBus()){
            EventBus.getDefault().unregister(this);
        }
    }

    protected boolean doIneedEventBus() {
        return true;
    }
}

子クラス:

public class TestChild extends Test {

    @Override
    protected boolean doIneedEventBus() {
        return false;
    }
}

2 番目のオプション:

 try {
            EventBus.getDefault().register(this);
        } catch (Throwable t){
            t.printStackTrace();
        }

または、この問題がライブラリで修正されるまで待つこともできます - https://github.com/greenrobot/EventBus/issues/58

于 2015-08-28T08:35:29.650 に答える
0

基本クラスと互換性のある rxbus2 ライブラリを使用します。

https://github.com/warrenth/RxBus2

于 2018-07-17T02:24:13.780 に答える