我已经为我的应用程序实现了一个总线,用于片段和活动之间的通信。我通过将 aFragment
或 an的实例添加Activity
到列表来添加订阅者。我遍历该列表,调用一个方法来通知每个订阅者正在发生的事情。现在我需要保持列表干净,我不想在列表中添加同一类的多个实例。我可以使用equals()
,Activity
但我不能使用,Fragment
因为它是最终的,所以我不能覆盖它。
我尝试过的
我试图Class
在列表中保留每个订阅者的对象,在我调用该方法之前它工作正常。你不能调用没有实例的方法来调用它。所以那行不通。
我还可以保留一个单独的列表,一个用于保存Class
对象,一个用于保存实际实例。但如果可能的话,我想避免添加另一个依赖项。
我也可以手动instanceof
检查每个Fragment
,但我不想这样做,因为我已经有 5 个片段,如果我添加或删除任何片段,那么我必须回到这里并更新此方法。
所以我的问题是,除了添加另一个List
来保存Class
对象或手动instanceof
检查之外,还有其他方法可以确保我不会向订阅者添加多个实例List
吗?
如果您需要,这是相关代码:
public void subscribe(Object object) {
if (!mSubscribers.contains(object)) {
mSubscribers.add(object);
}
}
public void notifySubscribers(BusEvent event) throws InvocationTargetException, IllegalAccessException {
for (Object o : mSubscribers) {
Method methodToCall = getMethodToCall(o);
if (methodToCall != null) {
methodToCall.invoke(o, event);
}
}
}