【问题标题】:How can a Java sub class respond to an event in the super class?Java 子类如何响应超类中的事件?
【发布时间】:2018-03-20 07:11:31
【问题描述】:

我正在构建一个包含 3 个活动的 Android 应用;

  1. 主要活动
  2. 详情活动
  3. 地图活动

还有一个名为 DataRequester 的助手类,它从我的在线数据库中获取数据。

为了在我的应用程序启动时性能起见,在 MainActivity 中,我从在线数据库中预取(使用 DataRequester)两个自定义对象列表,并将它们存储在单例 StateManager 类中。这样当用户进入 MapActivity 时,我们不需要再次重新加载相同的列表数据。

我在所有 3 个活动中都有一个方法来查找数据,并在需要时加载它,使用 DataRequester 类。数据在回调中返回。

这是我的问题。我在 3 个不同的活动中有相同的代码,我想保持我的代码干燥,我认为最好将代码合并到一个 BaseActivity 类中,并让我的所有三个活动都扩展该基类。所以我将所有重复的代码移到了基类中,包括回调方法......现在我被卡住了。这个重要的获取我的数据的工作发生在我的超级/基类中......但子类活动没有意识到它。回调发生在超类中。

我怎样才能在我的超类中有下载代码,而在子类中有某种回调触发?解决这种编码困境的最佳方法是什么?

【问题讨论】:

  • 除了将界面移回之外,您还可以选择采用 RxAndroid 和/或 EventBus/Otto 等库

标签: java android oop


【解决方案1】:

您可以在此处使用方法覆盖:

BaseActivity :您可以将其设为 abstract,因为无论如何您都不会实例化它。

void onDataReceived() {
    actOnData();
}

abstract void actOnData();

ChildActivity1 扩展 BaseActivity

@Override
void actOnData() {
    // Act differently based on ChildActivity1 requirements.
}

ChildActivity2 扩展 BaseActivity

@Override
void actOnData() {
    // Act differently based on ChildActivity2 requirements.
}

【讨论】:

  • 那么如果超类调用actOnData(Object myObject) 并且子类覆盖actOnData 它会传递对象吗?我假设超类只能将数据发送到它自己的方法而不是它的孩子
  • 因为你把超类抽象化了,所以它的对象不能被创建。创建的对象将属于子类。超类可以在其自己的类中调用该抽象方法,其实现由当前实例化对象的类定义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-22
  • 1970-01-01
  • 2015-03-09
  • 1970-01-01
  • 2020-07-15
  • 2019-06-29
相关资源
最近更新 更多