В чем преимущество создания экземпляра класса интерфейса вместо простого добавления этого интерфейса к основному классу для обратных вызовов? - PullRequest
1 голос
/ 07 августа 2020

Я работаю над приложением 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.

Первый подход должен иметь свои преимущества, иначе зачем кому-то это было нужно.

Человек, написавший этот код, наверняка более опытен, чем я. Если я делаю что-то странное, предпочитая второй подход, было бы неплохо понять, почему это странно, узнать что-то и избежать проблемы в следующий раз.

1 Ответ

2 голосов
/ 07 августа 2020

Единственное преимущество первого подхода - если вам нужно два или более интерфейса для отдельных вещей в вашем классе. Во всех остальных случаях я бы использовал второй подход, поскольку он делает код более чистым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...