首页 > 解决方案 > 创建一个接口类的实例而不是仅仅将该接口添加到回调的主类有什么好处?

问题描述

我正在开发一个 Android 应用程序,我遇到了以下来自 C++ 的一组回调的代码。我想知道为什么使用接口类 JNIListener 的实例而不是实现接口并直接添加回调是有意义的。

public interface JNIListener {
    void onProcessingStarted();
    void onResultAvailable();
} 


public class MainFragment extends Fragment {

......

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {

        .....  

        mListener = new JNIListener() {
            @Override
            public void onProcessingStarted() {
                NavDirections action = MainFragmentDirections.actionMainFragmentToResultFragment();
                NavHostFragment.findNavController(ThisFragment).navigate(action);
            }

            @Override
            public void onResultAvailable(){
                ....
            }
        }
        subscribeListener(mListener);
    }
}

代替 :

public class MainFragment extends Fragment implements JNIListener{

......

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {

        .....  

        subscribeListener(this);
    }

    @Override
    public void onProcessingStarted() {
        NavDirections action = MainFragmentDirections.actionMainFragmentToResultFragment();
        NavHostFragment.findNavController(thisFragment).navigate(action);
    }

    @Override
    public void onResultAvailable(){
        ....
    }
}

我没有得到第一种方法的优点。第二个对我来说更有意义:回调可以完全访问 MainFragment 的成员。

第一种方法应该有它的优点,否则为什么有人会那样做。

编写该代码的人肯定比我更有经验。如果我通过更喜欢第二种方法来做一些奇怪的事情,那么理解它为什么很奇怪,学习一些东西并在下次避免这个问题时会很好。

标签: javaandroidandroid-fragments

解决方案


第一种方法的唯一优点是如果您需要两个或更多接口来处理类中的单独事物。在其他情况下,我会使用第二种方法,因为它使代码看起来更干净。


推荐阅读