如何在 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的多重继承。因此,您可以实现任意数量的接口。
为避免在多个 类 之间重复和共享代码,您可以使用委托。
例如:
- 接口:
interface IGas {
checkGas();
onLowGasEvent();
}
interface IBattery
checkBattery();
onLowBatteryEvent();
}
- 常见功能的实现
class GasImpl implements IGas {
checkGas() {
...
}
onLowGasEvent() {
...
}
}
class BatteryImpl implements IBattery {
checkBattery() {
...
}
onLowBatteryEvent() {
...
}
}
- 活动(注意实现设置):
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();
}
}
- 然后你的
HybridCar
将是这样的:
class HybridCar extends Car implements IGas {
IGas mGasImpl;
IBattery mBatteryImpl;
checkGas() {
mGasImpl.checkGas();
}
checkBattery() {
mBatteryImpl.checkBattery();
}
}
- 如果您想使用
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 不允许多重继承...但是有接口!
就像这样:
-创建两个接口:一个用于汽油车,一个用于电动车。
-你的混合动力汽车实现了这两个接口,所以你有两个你需要验证的函数。
-您的旧车 类 根据其类型实现了正确的接口。
希望这对您有所帮助或给您一些提示。
干杯
我有两个活动都从基础 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的多重继承。因此,您可以实现任意数量的接口。 为避免在多个 类 之间重复和共享代码,您可以使用委托。
例如:
- 接口:
interface IGas {
checkGas();
onLowGasEvent();
}
interface IBattery
checkBattery();
onLowBatteryEvent();
}
- 常见功能的实现
class GasImpl implements IGas {
checkGas() {
...
}
onLowGasEvent() {
...
}
}
class BatteryImpl implements IBattery {
checkBattery() {
...
}
onLowBatteryEvent() {
...
}
}
- 活动(注意实现设置):
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();
}
}
- 然后你的
HybridCar
将是这样的:
class HybridCar extends Car implements IGas {
IGas mGasImpl;
IBattery mBatteryImpl;
checkGas() {
mGasImpl.checkGas();
}
checkBattery() {
mBatteryImpl.checkBattery();
}
}
- 如果您想使用
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 不允许多重继承...但是有接口!
就像这样:
-创建两个接口:一个用于汽油车,一个用于电动车。
-你的混合动力汽车实现了这两个接口,所以你有两个你需要验证的函数。
-您的旧车 类 根据其类型实现了正确的接口。
希望这对您有所帮助或给您一些提示。
干杯