【发布时间】:2016-07-23 13:38:00
【问题描述】:
我面临的问题是如何分离来自 Observable 的 3rd Party API notifyObservers 的 Object 数据。
该程序基于观察者模式,我能够成功地将观察者链接到第 3 方 API Observable,这会触发观察者中的更新方法。
代码: notifyObservers of Observable:
public void newData(String car,String model,CustFeedBack csFeed){
setChanged();
notifyObservers(new Object[]{car,model,csFeed});
}
在观察者更新方法中,我正在尝试强制转换 arg 以便我可以从 nofifyObservers 获取 Object 中的 3 个数据中的每一个
@Override
public void update(Observable observable, Object arg) {
dataSubject = (DataSubject) arg;
System.out.println(dataSubject.length);
display();
}
我得到一个 java.lang.ClassCastException: [Ljava.lang.Object;无法转换为...希望我面临的问题很清楚并等待有关如何继续将对象数据分解为 3 个单独部分的指导。
【问题讨论】:
-
update正在被您的notifyObservers方法调用,我猜?您正在将一个对象数组传递给那些update方法,并试图将此数组转换为一种类型。我认为您应该将其转换为对象数组。应该类似于Object[] values = (Object[])arg -
@Alex 我也试过了,但仍然得到 ClassCastException (java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Lpkg1.Model.DataSubject;)跨度>
-
当您在有问题的行 (
dataSubject = (DataSubject) arg;) 上放置断点时,调试器会说什么?arg包含什么,它的类型是什么?也许这是你没想到的。 -
@Alex 在调试中我确实注意到 arg 包含我期望的值。无法弄清楚我在这里搞砸了什么..
-
这听起来很奇怪。我不知道您项目的尺寸,但您可以考虑“提取”所需的值,而不是将它们传递给观察者方法。你的观察者知道 Observable(你的第一个参数)并且可以调用它的方法来收集所需的信息。它实际上不是针对您的特定问题的解决方案,但您可以解决它。
标签: observer-pattern observers