2016-05-28 5 views
0

Ich mache ein Java-Projekt, und ich muss prüfen, ob ein bestimmtes Objekt aus einem Eingabestream vom Typ "xyzirgendwas" ist.Wie finde ich die Klasse eines Objekts, das von einem Objekteingangsstrom kommt?

Ich verstehe, dass ich instanceof verwenden kann, aber wenn ich instanceof auf den Klassennamen "xyzsomething" überprüfe, gibt es mir einen Kompilierungsfehler, weil es den Klassennamen nicht erkennt. Was soll ich machen?

bearbeiten: Sorry, ich bin neu hier. Hier ist der Code und Fehler:

if ((input instanceof ShotCoordinatesServer)) <--- error occurs on this 
               it won't recognize class. 
{ 
     checkHit((ShotCoordinatesServer)input); <--- error occurs on this too 
} 

ERROR: cannot find symbol 
+1

... Haben Sie sicherstellen, dass Sie es richtig eingegeben? Bitte bearbeiten Sie Ihre Frage, um das relevante Code-Snippet hinzuzufügen. –

+0

Nur geändert, um meinen Code einzuschließen. Es ist wahrscheinlich ein sehr einfacher Fehler, aber ich bin mir nicht sicher, wie ich das beheben soll. –

+0

Dies ist nicht der Grund für Ihren Fehler. Wo tritt der Fehler auf? Poste mehr Code bitte. –

Antwort

0

Hier ist ein Beispiel:

ObjectInputStream ois = ... 
Object something = ois.readObject(); 
if (something instanceof MyClass) { 
    ((MyClass) something).someMethodOfMyClass(); 
} 

Dies kompilieren sollte ... vorausgesetzt, dass das Symbol MyClass zum Zeitpunkt der Kompilierung bekannt ist.


In Ihrem Beispiel scheint es, dass ShotCoordinatesServer nicht zum Zeitpunkt der Kompilierung bekannt ist. Der Fix kann einfach import der Klasse sein. Oder Sie müssen es möglicherweise dem Klassenpfad für die Kompilierung hinzufügen. Wenn die Klasse beim Kompilieren nicht verfügbar ist, können Sie instanceof und Typumwandlungen nicht verwenden. Stattdessen müssen Sie reflection verwenden ... oder vielleicht testen und in einen Schnittstellentyp konvertieren, der ein Supertyp von ShotCoordinatesServer ist.

Aber wenn Sie wollen einfach nur den Namen der Klasse, um herauszufinden, die Sie gerade lesen ...

System.out.println(something.getClass().getName()); 
Verwandte Themen