java - 创建一个接口类的实例而不是仅仅将该接口添加到回调的主类有什么好处?
问题描述
我正在开发一个 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 的成员。
第一种方法应该有它的优点,否则为什么有人会那样做。
编写该代码的人肯定比我更有经验。如果我通过更喜欢第二种方法来做一些奇怪的事情,那么理解它为什么很奇怪,学习一些东西并在下次避免这个问题时会很好。
解决方案
第一种方法的唯一优点是如果您需要两个或更多接口来处理类中的单独事物。在其他情况下,我会使用第二种方法,因为它使代码看起来更干净。
推荐阅读
- flutter - Flutter 调用 StatefulWidget 的构造函数导致无法计算表达式
- css - 子进程继承的事件目标不会影响父 React
- python - 添加后程序在文件中找不到新对象
- php - 联系表格 7 提交后更改用户角色
- c# - 使用个人用户帐户将 IdentityServer 添加到 Razor 应用程序 - 发现多个 DbContext
- reactjs - Material UI - 带有 2 个变量的自动完成表单标签
- r - Hugo Theme Academic:在 about 部分重命名“interests”
- excel - 努力寻找公式来确定某个单词是否出现在同一个帐户中
- time-complexity - 平均案例分析与摊销分析
- git - Sourcetree - Bitbucket - 恢复已删除的提交推送(为其他人制作)