我正在开发一个连接到基于蓝牙的多传感器(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内置传感器和外部传感器的数据。它允许你创建一个自定义的"Probe“实现。但是,探针的意思是(通过库和约定中的建议)一次只能用于一个传感器。
原问题:
所以,我的问题是:有没有可能以某种方式将DroneEventListener()类细分为特定的传感器?在那之后,我可以很容易地为多传感器上的每个传感器创建一个自定义探针。
我意识到,尝试细分抽象类可能是不好的做法,因为从概念上讲,这是开发人员的合同。但是,我觉得稍微修改一下,使这些代码与一个预先存在的、可靠的、维护良好的库(funf)一起工作是值得的。
或者,有没有其他创造性的解决方案,可以让我在funf中使用制造商的库?
编辑(2013年6月24日):
我已经决定,我对“细分”一词的使用只对我来说是很清楚的。我本质上的意思是,我不想实现20多个空白方法,而我只使用了一个。选择的答案准确地解释了如何做到这一点。
精炼的问题:
有没有可能只实现一个EventListener中的一个函数(具有多个函数),而不必实现混乱的空方法?
发布于 2013-06-25 18:12:12
如果您只想使用一种方法来处理每个事件,则可以创建一个处理重定向的抽象类。
这样,您只需实现此方法即可处理所有事情。
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.
}如果您只需要实现一些事件,而不是所有其他事件的存根都是空的,那么您可以创建一个抽象类,用一个空方法来实现每个事件。它被称为“适配器”,在JDK中非常常见(例如,请参阅MouseMotionListener和MouseMotionAdapter )。
在扩展这个类时,您将能够仅覆盖您希望支持的事件。
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.
}发布于 2013-06-21 09:18:03
您不能拆分DroneEventListener,但可以让它将其事件处理委托给每个传感器的不同对象。
class SplittingListener implements Drone.DroneEventListener {
public void adcMeasured(java.util.EventObject event) {
adcProbe.heyAThingHappened(event);
}
public void altitudeMeasured(java.util.EventObject event) {
altitudeProbe.itsYourProblemNow(event);
}
public void capacitanceMeasured(java.util.EventObject event) {
capacitanceProbe.passTheBuck(event);
}
// ...
}发布于 2013-06-25 15:11:50
我对你精炼的问题的回答是:我相信可以只实现EventListener的一个函数,但是您仍然需要在代码中包含它所需的所有方法,即使是作为空存根。我已经遇到这种情况好几次了,我总是把那些我不需要实现的代码作为空存根放在底部。
https://stackoverflow.com/questions/17159702
复制相似问题