gpt4 book ai didi

java - 可以从具有多个功能的 EventListener 中只实现一个功能吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:30:28 27 4
gpt4 key购买 nike

我正在开发一个应用程序来连接到基于蓝牙的多传感器 ( SensorDrone )。它总共包含大约 15 个传感器,所有这些传感器都可以使用芯片制造商创建的第三方闭源库与 Android 设备进行通信。

第三方库要求我实现一个自定义 Java EventListener,它包含每个传感器的函数,当其数据准备好使用时会被触发:

DroneEventListener droneEventListener = new DroneEventListener() {

@Override
public void temperatureMeasured(EventObject arg0) {
readTemperatureFromDrone();
}

@Override
public void pressureMeasured(EventObject arg0) { /*...*/ }

// Etc...

@Override
public void disconnectEvent(EventObject arg0) {
// Let the user know the bluetooth connection was lost
}

@Override
public void connectEvent(EventObject arg0) {
// Let the user know the device was connected
}


};

但是,我希望使用另一个名为 funf 的库也可以从 Android 的内置传感器获取信息。该库非常适合为内置 Android 传感器和外部传感器收集数据。它通过允许您创建自定义“Probe”实现来做到这一点。但是,探针意味着(根据图书馆和惯例的建议)一次只能用于一个传感器。

原始问题:

所以,我的问题是这样的;是否有可能以某种方式将 DroneEventListener() 类分割为特定的传感器?之后,我可以轻松地为多传感器上的每个传感器创建自定义探针。

我意识到尝试分割抽象类可能是不好的做法,因为它在概念上是开发人员的契约。但是,我觉得让此代码与预先存在的、可靠且维护良好的库 ( funf ) 一起工作是值得的。

或者,是否有任何其他创造性的解决方案可以让我将制造商的库与 funf 一起使用?

编辑(2013 年 6 月 24 日):

我已经决定我对“分割”这个词的使用只有我自己清楚。我的意思是,当我只使用一个方法时,我不想实现 20 多个空白方法。选择的答案准确地解释了如何做到这一点。

细化问题:

是否可以从 EventListener(具有多个函数)中只实现一个函数而不必实现困惑的空方法?

最佳答案

如果您只想使用一种方法来处理每个事件,您可以创建一个抽象类来处理重定向。

这样,您只需实现此方法即可处理所有事情。

public abstract DroneEventAdapter implements DroneEventListener {
public abstract void eventOccured(EventObject event);

@Override
public void temperatureMeasured(EventObject event) {
eventOccured(event);
}

@Override
public void pressureMeasured(EventObject event) {
eventOccured(event);
}

@Override
public void disconnectEvent(EventObject event) {
eventOccured(event);
}

@Override
public void connectEvent(EventObject event) {
eventOccured(event);
}

// Etc.
}

如果您只需要实现一些事件而不需要为其他所有事件创建空 stub ,则可以创建一个抽象类来使用空方法实现每个事件。它被称为“适配器”,在 JDK 中非常常见(例如,参见 MouseMotionListenerMouseMotionAdapter)。

扩展此类时,您将能够仅覆盖您想要支持的事件。

public abstract DroneEventAdapter implements DroneEventListener {
@Override
public void temperatureMeasured(EventObject event) {}

@Override
public void pressureMeasured(EventObject event) {}

@Override
public void disconnectEvent(EventObject event) {}

@Override
public void connectEvent(EventObject event) {}

// Etc.
}

关于java - 可以从具有多个功能的 EventListener 中只实现一个功能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17159702/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com