如何在 Android Java 中继承具有 LifeCycle 事件和事件总线支持的多个 Activity?

How to inherent from multiple Activities with LifeCycle events and event bus support in Android Java?

我有两个活动都从基础 activity 扩展而来。

CarActivity{

}

GasCarActivity extends CarActivity{

  function onCreate(){
     registerGasEvent() // so that onLowGasEvent() will work
  }

  function checkGas(){}

  @Subscribe(threadMode = ThreadMode.MAIN)
  function onLowGasEvent(){

  }
}

ElectricCarActivity extends CarActivity{

  function checkBattery(){}

  @Subscribe(threadMode = ThreadMode.MAIN)
  function onLowBatteryEvent(){

  }
}

现在我需要一个同时使用 GasCarActivity 和 ElectricCarActivity 函数和生命周期事件的 HybridCarActivity。

我也在用eventbus库,如何在HybridCarActivity中同时拥有onLowGasEvent和onLowBatteryEvent的订阅功能?

我可以在这里做什么?

Java 没有多重继承。您将必须使 Car 对象具有您要使用的共享方法。

Java不支持implementation的多重继承,但支持interface的多重继承。因此,您可以实现任意数量的接口。 为避免在多个 类 之间重复和共享代码,您可以使用委托。

例如:

  1. 接口:
interface IGas {
  checkGas();
  onLowGasEvent();
}

interface IBattery
  checkBattery();
  onLowBatteryEvent();
}
  1. 常见功能的实现
class GasImpl implements IGas {
  checkGas() {
  ...
  }
  onLowGasEvent() {
  ...
  }
}

class BatteryImpl implements IBattery {
  checkBattery() {
  ...
  }
  onLowBatteryEvent() {
  ...
  }
}
  1. 活动(注意实现设置):
class GasCar extends Car implements IGas {
  IGas mGasImpl = new GasImpl();   // create it in your own code, or inject to inverse dependencies, etc.

  checkGas() {
    mGasImpl.checkGas();
  }

  onLowGasEvent() {
    mGasImpl.onLowGasEvent();
  }
}

class BatteryCar extends Car implements IBattery {
  IBattery mBatteryImpl;   

  checkBattery() {
    mBatteryImpl.checkGas();
  }

  onLowBatteryEvent() {
    mBatteryImpl.onLowBatteryEvent();
  }
}
  1. 然后你的 HybridCar 将是这样的:
class HybridCar extends Car implements IGas {
  IGas mGasImpl;
  IBattery mBatteryImpl;   

  checkGas() {
    mGasImpl.checkGas();
  }
  checkBattery() {
    mBatteryImpl.checkBattery();
  }
}
  1. 如果您想使用 EventBus,您应该将订阅者保留为 Activity 接口 - 但也将其实现委托给处理程序。所以,在 HybridActivity:
  @Subscribe(threadMode = ThreadMode.MAIN)
  function onLowGasEvent(){
     mGasImpl.onLowGasEvent();
  }

  @Subscribe(threadMode = ThreadMode.MAIN)
  function onLowBatteryEvent(){
    mBatteryImpl.onLowBatteryEvent();
  }

如果 onLow...Event 需要 Context,请更新接口方法以将其作为参数传递。

希望对您有所帮助。

正如@Kristy Whesh 所建议的,Java 不允许多重继承...但是有接口!

就像这样:

-创建两个接口:一个用于汽油车,一个用于电动车。

-你的混合动力汽车实现了这两个接口,所以你有两个你需要验证的函数。

-您的旧车 类 根据其类型实现了正确的接口。

希望这对您有所帮助或给您一些提示。

干杯