| Autor |
Nachricht |
freakC++
Mitglied
Benutzerprofil
Anmeldungsdatum: 26.04.2008
Beiträge: 1915
|
freakC++ Mitglied
13:56:17 21.03.2012 Titel: |
Nochmal: instanceof |
Zitieren |
Hallo zusammen,
mir ist leider noch immer nicht so klar, wie instanceof funktioniert. Ich habe Onkel Google durchstöbert, aber eine Lösung, die mir gefällt, war nicht dabei. Ich habe den instanceof Operator so verstanden, dass er prüft, ob ein Objekt obj in der Vererbungshierarchie einer Klasse cl liegt.
if(obj instanceof cl)
Falls obj eine Instanz oder eine Subinstanz von cl ist, dann ergibt der Ausdruck true. Falls obj eine Superinstanz von cl ist, so wird false zurückgegeben.
Wenn jedoch (und das verstehe ich nicht), die Klasse cl gar nichts mit "obj" zu tun hat, dann wird eine Exception geworfen? Warum? Ich verwende doch instanceof gerade dafür, dass ich herausfinde, wie die Beziehung zwischen Objekt und Klasse ist. Was hat das für einen Sinn und kann ich dieses Problem irgendwie umgehen?
Vielen Dank
LG, freakC++ |
|
|
|
 |
SG1
Mitglied
Benutzerprofil
Anmeldungsdatum: 19.03.2001
Beiträge: 2562
|
SG1 Mitglied
14:03:14 21.03.2012 Titel: |
|
Zitieren |
Falsch, instanceof wirft keine Exception. Wir kommst Du darauf? Siehe JLS 15.20.2 |
|
|
|
 |
freakC++
Mitglied
Benutzerprofil
Anmeldungsdatum: 26.04.2008
Beiträge: 1915
|
freakC++ Mitglied
14:05:03 21.03.2012 Titel: |
|
Zitieren |
Oh ja, ich sah nur rot in meinem Compiler . Aber es wird ein Compilerfehler ausgegeben? Warum? |
|
|
|
 |
icarus2
Mitglied
Benutzerprofil
Anmeldungsdatum: 20.09.2009
Beiträge: 1366
|
icarus2 Mitglied
14:06:58 21.03.2012 Titel: |
|
Zitieren |
| freakC++ schrieb: | Oh ja, ich sah nur rot in meinem Compiler . Aber es wird ein Compilerfehler ausgegeben? Warum? |
Wie lautet denn der Compiler Fehler? Etwas Code koennte auch nicht schaden. |
|
|
|
 |
freakC++
Mitglied
Benutzerprofil
Anmeldungsdatum: 26.04.2008
Beiträge: 1915
|
freakC++ Mitglied
14:10:19 21.03.2012 Titel: |
|
Zitieren |
halt nen ganz normaler Compilerfehler:
Unresolved compilation problem:
Incompatible conditional operand types A and String
Die Fehlermeldung ist eindeutig, aber ich dachte instanceof wäre gerade dazu da, um zu prüfen ob obj vom Typ A, vielleicht doch vom Typ String ist.... |
|
|
|
 |
SG1
Mitglied
Benutzerprofil
Anmeldungsdatum: 19.03.2001
Beiträge: 2562
|
SG1 Mitglied
14:20:55 21.03.2012 Titel: |
|
Zitieren |
Der entsprechende Cast gibt ja auch einen Compilerfehler, also ist das doch sinnvoll. |
|
|
|
 |
314159265358979
Mitglied
Benutzerprofil
Anmeldungsdatum: 09.03.2010
Beiträge: 4658
|
314159265358979 Mitglied
14:28:30 21.03.2012 Titel: |
|
Zitieren |
instanceof funktioniert eben nur mit 2 Operanden, die hierarchisch verwandt sind. |
|
|
|
 |
freakC++
Mitglied
Benutzerprofil
Anmeldungsdatum: 26.04.2008
Beiträge: 1915
|
freakC++ Mitglied
14:35:13 21.03.2012 Titel: |
|
Zitieren |
| 314159265358979 schrieb: | | instanceof funktioniert eben nur mit 2 Operanden, die hierarchisch verwandt sind. |
Also muss ich doch schon was über das Objekt wissen? Mhhmmm....ok
LG, freakC++ |
|
|
|
 |
314159265358979
Mitglied
Benutzerprofil
Anmeldungsdatum: 09.03.2010
Beiträge: 4658
|
314159265358979 Mitglied
14:44:16 21.03.2012 Titel: |
|
Zitieren |
2 x-beliebige Operanden vergleichen ergibt ja auch keinen Sinn. Das würde ja immer false ergeben. |
Zuletzt bearbeitet von 314159265358979 am 14:44:46 21.03.2012, insgesamt 1-mal bearbeitet |
|
 |
icarus2
Mitglied
Benutzerprofil
Anmeldungsdatum: 20.09.2009
Beiträge: 1366
|
icarus2 Mitglied
14:45:25 21.03.2012 Titel: |
|
Zitieren |
| freakC++ schrieb: | Also muss ich doch schon was über das Objekt wissen? Mhhmmm....ok
LG, freakC++ |
Wen du den Code
| Java: | 1 2 3 4 5 6 7 8 9 | class A
{
// Irgendwas
}
class B
{
// Irgendwas
} | |
hast, dann ist der Code
| Java: | A a = new A();
if ( a instanceof B )
{
// Mach was
} | |
nicht sinnvoll, da dies nicht zur Laufzeit sondern bereits zur Compile-Zeit entschieden werden kann. |
|
|
|
 |