有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何利用Android Java中的生命周期事件和事件总线支持从多个活动中恢复固有功能?

我有两个活动,它们都是从基本活动扩展而来的

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(){

  }
}

现在,我需要一个混合的CArActivity,它使用GasCarActivity和ElectricCarActivity函数以及生命周期事件

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

我能在这里做什么


共 (3) 个答案

  1. # 1 楼答案

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

  2. # 2 楼答案

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

    就这样做吧:

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

    -你的混合动力汽车实现了这两个接口,因此你有两个需要验证的功能

    -旧汽车类根据其类型实现正确的接口

    希望这能给你一些帮助或提示

    干杯

  3. # 3 楼答案

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

    例如:

    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,你应该把订阅服务器作为一个活动接口——但也要把它的实现委托给处理程序。因此,在HybridActivity中:
      @Subscribe(threadMode = ThreadMode.MAIN)
      function onLowGasEvent(){
         mGasImpl.onLowGasEvent();
      }
    
      @Subscribe(threadMode = ThreadMode.MAIN)
      function onLowBatteryEvent(){
        mBatteryImpl.onLowBatteryEvent();
      }
    

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

    希望有帮助