ich verliere gerade die Nerven und ihr wahrscheinlich die letzten Haare
bei folgender Zeile:
Vector<A> copyOfListeners = (Vector<A>)listeners.clone();
ich erhalte die Warnung, das das typunsicher ist (unchecked cast). Aber
wie mache ich das denn typsicher? Ich kann ja nicht zuvor eine instanceof-
Abfrage machen und eine Exception wirft die Zeile (zu dem Thema) auch
nicht. Ganz ohne Angabe eines Typs erhalte ich die Meldung, dass ich raw-
Types verwende. Das will ich auch nicht. Grummel, grummel...
Grüße!
P.S.: In drei von drei Büchern, die ich über Java jetzt mehr oder weniger
vollständig gelesen habe finde ich stets die Notation Vector, nicht
Vector<Typ>. Wie kommt es dazu?
Einer der Fälle wo man @SuppreWarnings("unckecked") einsetzen muss.
clone() gibt ja nur ein Object zurück. Und von da aus erzeugt dieser
cast eben eine Warnung.
Umgehen kannt du den ekligen Ansatz mit der Annotation natürlich, wenn
du einfach einen copy-Konatruktor oder addAll verwendest. clone() sollte
man imho eh meiden.
Ein Tipp noch: Vector ist out. ArrayList ist In ;-)
>
> P.S.: In drei von drei Büchern, die ich über Java jetzt mehr oder weniger
> vollständig gelesen habe finde ich stets die Notation Vector, nicht
> Vector<Typ>. Wie kommt es dazu?
Dass es letztere Schreibweise nicht immer gab
Generics aka das zeug mit den Spitzen Klammern gibt es erst ab Java
1.5/5.0. Vector selber ist aus der Mode gekommen, man nutzt
implementierungen von java.util.List wie Arraylist oder LinkedList.
bernd
> Hallo,
>
> ich verliere gerade die Nerven und ihr wahrscheinlich die letzten Haare
> bei folgender Zeile:
>
> Vector<A> copyOfListeners = (Vector<A>)listeners.clone();
>
> ich erhalte die Warnung, das das typunsicher ist (unchecked cast). Aber
> wie mache ich das denn typsicher?
Gar nicht. Die Methode macht keine Zusicherung über den Typen, also kann
der Cast aus Sicht der Signatur nicht sicher sein.
> P.S.: In drei von drei Büchern, die ich über Java jetzt mehr oder weniger
> vollständig gelesen habe finde ich stets die Notation Vector, nicht
> Vector<Typ>. Wie kommt es dazu?
Die Typangabe (Generics) gibt es erst ab Java 1.5. Die Bücher scheinen aus
grauer Vorzeit zu stammen, denn auch "Vector" wird in der Regel nicht mehr
gern benutzt.
ArrayList ist idR die bessere Wahl, weil unsynchronisiert. Und wenn man
unsynchronisierte Listen synchronisieren will, legt man das per
Collections.synchronizedList() einen synchronisierten Wrapper drum, das
Vorgehen ist wesentlich generischer.
Wer kein synchronisierte Liste will, die dennoch threadsicher ist, findet
man z.B. eine CopyOnWriteArrayList in java.util.concurrent (allerdings mit
sehr speziellen Laufzeit-Eigenschaften, die es zu beachten gibt).
Siehe dazu auch:
http://www.ibm.com/developerworks/java/library/j-jtp07233.html
Gruß,
-Wanja-
--
Erstellt mit Operas revolutionärem E-Mail-Modul: http://www.opera.com/mail/
--- news://freenews.netfront.net/ - complaints: ne...@netfront.net ---
> Hallo,
>
> ich verliere gerade die Nerven und ihr wahrscheinlich die letzten Haare
> bei folgender Zeile:
>
> Vector<A> copyOfListeners = (Vector<A>)listeners.clone();
>
> ich erhalte die Warnung, das das typunsicher ist (unchecked cast). Aber
> wie mache ich das denn typsicher?
Gar nicht. Die Methode macht keine Zusicherung über den Typen, also kann
der Cast aus Sicht der Signatur nicht sicher sein.
Aber was spricht gegen das hier?
final ArrayList copy = new ArrayList(listeners);
> P.S.: In drei von drei Büchern, die ich über Java jetzt mehr oder weniger
> vollständig gelesen habe finde ich stets die Notation Vector, nicht
> Vector<Typ>. Wie kommt es dazu?
Die Typangabe (Generics) gibt es erst ab Java 1.5. Die Bücher scheinen aus