Я работаю над приложением 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.
Первый подход должен иметь свои преимущества, иначе зачем кому-то это было нужно.
Человек, написавший этот код, наверняка более опытен, чем я. Если я делаю что-то странное, предпочитая второй подход, было бы неплохо понять, почему это странно, узнать что-то и избежать проблемы в следующий раз.