PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Java] Exceptions beim Typcast?



cmdrdata
09.06.2004, 15:08
Hallo,
gibts in Java eigentlich eine Exception beim expliziten Typcast, die ich abfangen könnte?
Oder resultiert ein eventueller Fehler in einer RuntimeException und somit mit dem Crash des
Programms?
Ich weiss zwar, welchen Typ das Objekt hat, welches ich mir aus einem Vektor geholt habe und theoretisch darf da gar nix
schief gehen. Mir wär aber doch wohler, wenn ich den Cast in einen try-catch Block packen und eine vllt. auftretende
Exception abfangen könnte.

Gruss
cmdrdata

Hannnibal
09.06.2004, 16:07
Moin,

du kannst das objekt (o) fragen was es ist, zb

if (o instanceof Klasse)

mfg

Georg
09.06.2004, 16:31
Neben dem von Hannnibal erwähnten instanceof kann ich noch java 1.5 empfehlen ;D

Da kann man dann den Container-Klassen gleich den Inhalts-Typ übergeben und spart sich das gecaste. Dadurch wird die Typ-Prüfung zur Compile-Zeit vorgenommen.

z.B.:




Collection<Person> personenListe = new ArrayList<Person>();

// 1. Person
if (!personenListe.isEmpty())
{
Person person1 = personenListe.get(0);
...
}


Leider kann eclipse den Spaß noch nicht :(

Auch wenn es nicht ganz zu Deiner Frage passt, java 1.5 ist sehr zu empfehlen:

http://java.sun.com/developer/technicalArticles/releases/j2se15langfeat/
Dort findet man auch, wie man selber generische Klassen erstellt.

StrgAltEntf
10.06.2004, 15:01
Ich würd das selbe vorschlagen wie Hannibal - vorher abfragen, ob's die richtige Klasse ist.

Wenn du's mit try-catch machen will, ist die ClassCastException diejenige, die du abfangen musst.Alternativ könntest du auch deren Oberklasse RuntimeException oder (noch allgemeiner) Exception abfangen.
Allgemein sollte man aber möglichst die speziellsten Exceptions zuerst abfangen, um keine Informationen zu verschenken):
try{Bla bla = (Bla) blub;}
catch (ClassCastException ex) {System.out.println("blub ist kein Bla!");}
catch (RunTimeException ex) {System.out.println("Keine Ahnung was da schiefgelaufen ist, eine ClassCastException isses jedenfalls nicht.");}

P.S.: Wann kommt von Java 1.5 eigentlich die final?

mj
10.06.2004, 18:24
Original geschrieben von StrgAltEntf
P.S.: Wann kommt von Java 1.5 eigentlich die final?
When it's done ;)

cmdrdata
10.06.2004, 20:11
Danke euch. Bei der Java-Version bin ich leider auf 1.4.xx festgelegt, das Programm muss im Rechnerraum an der Uni laufen. Ich benutze dann bei Bedarf instanceOf, das wird schon klappen.
Dass man z.B. kein catch(Exception e) machen sollte, weiss ich auch, deshalb hab ich ja gefragt.