Wie funktioniert der Java cast-operator arbeiten?
Ich versuche zu Debuggen, und ein Problem mit einer classcastexception-Fehler in Java. Im Interesse der Lösung der Frage, die ich wissen müssen, was passiert, wenn ich den cast von Object auf einen bestimmten Typ. Kann jemand mir erklären, wie das Java cast-operator arbeitet auf der Java-Ebene und der JVM-Stufe?
Könnten Sie ein Beispiel geben, ein Beispiel, wo dies der Fall ist. Zum Beispiel, welche Klasse ist die spezifische Art und welche Klasse ist das Objekt?
Adam, ich bin wahrscheinlich zu Fragen, follow-up-Frage. Im wesentlichen erstelle ich eine Bohne aus der Feder des Typs "com.generisches.MyType", und es schlägt der cast auf (MyType). Ich denke, dies ist wahrscheinlich eine der Frühlings-Ausgabe über eine Java, aber ich bin versucht, um gründlich zu sein.
Ich weiß, es ist naheliegend, aber in der source-code, haben Sie importiert MyType als com.generisches.MyType an der Spitze? Oder man importiert mehrere Pakete (import org.generic.*; import org.andere.*;) enthalten können, mehrere Klassen " MyType und der compiler könnte die Wahl die falsche?
eigentlich habe ich nicht importiert, die für die Besetzung geben, und wenn ich es importieren Netbeans sagt, es ist unbenutzt. Jedoch den Fehler konkret nicht Stimmen, um com.generisches.MyType. Ich werde wahrscheinlich nach der Frage mit einigen wirklichen details später heute, wenn ich kann nicht weiter, ich gebe dir hier einen link.
Bitte tun; wir könnten wahrscheinlich helfen, Sie viel mehr auf diese Weise.
Adam, ich bin wahrscheinlich zu Fragen, follow-up-Frage. Im wesentlichen erstelle ich eine Bohne aus der Feder des Typs "com.generisches.MyType", und es schlägt der cast auf (MyType). Ich denke, dies ist wahrscheinlich eine der Frühlings-Ausgabe über eine Java, aber ich bin versucht, um gründlich zu sein.
Ich weiß, es ist naheliegend, aber in der source-code, haben Sie importiert MyType als com.generisches.MyType an der Spitze? Oder man importiert mehrere Pakete (import org.generic.*; import org.andere.*;) enthalten können, mehrere Klassen " MyType und der compiler könnte die Wahl die falsche?
eigentlich habe ich nicht importiert, die für die Besetzung geben, und wenn ich es importieren Netbeans sagt, es ist unbenutzt. Jedoch den Fehler konkret nicht Stimmen, um com.generisches.MyType. Ich werde wahrscheinlich nach der Frage mit einigen wirklichen details später heute, wenn ich kann nicht weiter, ich gebe dir hier einen link.
Bitte tun; wir könnten wahrscheinlich helfen, Sie viel mehr auf diese Weise.
InformationsquelleAutor James McMahon | 2009-05-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist die JLS gut genug?
Eigentlich, vielleicht dieses Teil mehr relevant:
Perfekt jetzt klar, nicht wahr? 😀
In anderen Worten, dies ist das beste, das ich tun kann, ohne zu wissen, mehr details über Ihr problem.
Hmm... ich ging und entfernt alle links aus dem zweiten Teil, aber ich weiß nicht, was falsch ist mit dem ersten Teil.
Wenn jemand weiß, warum der link handeln seltsam, bitte gehen Sie voran und fixieren Sie es!
Vielleicht ist es noch nicht, wie Anker-tags?
Aber es gibt keine Anker-tags; ich zog Sie alle schon.
InformationsquelleAutor Michael Myers
Eine wahrscheinliche Ursache von Klasse cast mystifcation ist nicht nur, dass die Typen zusammenpassen, aber Sie müssen auch geladen werden, indem der gleiche classloader.
Sollten Sie in der Lage, dump nicht nur die Typ-Hierarchie, sondern auch die Identität des classloader für jede Klasse.
Diese Art von Problemen sind nicht selten in appserver-Stil-Umgebungen, in denen der code der Anwendung und infratructure code absichtlich isoliert - zum Beispiel, wenn system-Klassen sind versehentlich eingeschlossen in applciation Gläser können Sie zwei Kopien der "gleichen" Klasse in die JVM und das Leben wird verwirrend
Das ist ein guter Vorschlag, aber nach der Ausführung .getClassLoader() auf diese beiden Klassen angezeigt, die geladen werden von der gleichen class loader.
Nur für die anderen Leute, die möglicherweise zur Problembehandlung, es ist mehr über den class-loader Ausgabe auf stackoverflow.com/questions/826319/....
InformationsquelleAutor djna
Casting behauptet, dass der Laufzeit-Typ eines Objekts ist kompatibel mit den angegebenen statischen Typ, und so können Sie Methoden aufrufen, die Art auf das Objekt.
Hier obj ist ein Integer-Objekt, sondern nur zugänglich, wenn eine Objekt-Referenz:
Casting können Sie behandeln es als eine ganze Zahl (oder eine Oberklasse von Integer) wieder:
Classcastexception-Fehler aufgetreten ist, wenn der statische Typ gegeben, nicht mit der Laufzeit-Typ des Objekts:
Finden Sie den Laufzeit-Typ eines Objekts mithilfe von getClass() und die verschiedenen Klassen Methoden:
InformationsquelleAutor
Andere nützliche und verbindliche Referenzen finden Sie in der Java Virtual Machine Specification, speziell §2.6.5, "Narrowing Reference Conversions", und insbesondere die definition der
checkcast
Unterricht.InformationsquelleAutor erickson