2016-04-04 10 views
0

Das Problem, dem ich gegenüberstehe, ist die Trennung der Objektdaten von der 3rd Party API notifyObservers von Observable.Observable - Observer (java.lang.ClassCastException: [Ljava.lang.Object; kann nicht in .. umgewandelt werden.)

Das Programm basiert auf Observer-Muster & Ich bin in der Lage, den Observer mit dem 3rd Party API Observable erfolgreich zu verknüpfen, der die Update-Methode im Observer auslöst.

Code:notifyObservers von beobachtbare:

public void newData(String car,String model,CustFeedBack csFeed){ 
    setChanged(); 
    notifyObservers(new Object[]{car,model,csFeed}); 
} 

Im Observer Update-Methode arg zu werfen versuchen so, dass ich von jedem der 3-Daten in dem Objekt kommt bekommen die nofifyObserver

@Override 
public void update(Observable observable, Object arg) { 
     dataSubject = (DataSubject) arg; 
     System.out.println(dataSubject.length); 
     display(); 
} 

Ich erhalte eine java.lang.ClassCastEx ception: [Ljava.lang.Object; kann nicht geworfen werden ... Hoffe das Problem, das ich gegenüberstelle, ist klar & erwarten Anleitung, wie ich fortfahren kann, um die Objektdaten in 3 separate Teile zu zerlegen.

+1

'update' wird von Ihrer' notifyObserver' Methode aufgerufen, schätze ich? Sie übergeben ein Array von Objekten an diese "update" -Methoden und versuchen, dieses Array in einen Typ umzuwandeln. Ich denke, du solltest es stattdessen in eine Reihe von Objekten werfen. Sollte etwas wie 'Object [] values ​​= (Objekt []) arg' sein – Alex

+0

@Alex Ich habe das auch versucht, aber immer noch die ClassCastException (java.lang.ClassCastException: [Ljava.lang.Object; kann nicht in umgewandelt werden [Lpkg1.Model.DataSubject;) – iCoder

+0

Was sagt der Debugger, wenn Sie einen Breakpoint auf die betreffende Zeile setzen ('dataSubject = (DataSubject) arg;')? Was enthält "arg" und was ist der Typ? Vielleicht ist es etwas, was du nicht erwartest. – Alex

Antwort

1

Hier ist mein Kommentar als Antwort :)

update wird von Ihrem notifyObservers Methode aufgerufen wird, ich denke? Sie übergeben diesen Update-Methoden ein Array von Objekten und versuchen, dieses Array in einen Typ umzuwandeln. Ich denke, du solltest es stattdessen in eine Reihe von Objekten werfen. Sollte etwas wie Object[] values = (Object[])arg

sein