Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Vector typsicher clonen

25 views
Skip to first unread message

Günther Frings

unread,
Jan 4, 2010, 7:15:41 AM1/4/10
to
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? 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?

Malte Schirmacher

unread,
Jan 4, 2010, 8:53:53 AM1/4/10
to
Günther Frings wrote:
> Hallo,
>
> ich verliere gerade die Nerven und ihr wahrscheinlich die letzten Haare
> bei folgender Zeile:
>
> Vector<A> copyOfListeners = (Vector<A>)listeners.clone();

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

Bernd 'Nexos' Dutkowski

unread,
Jan 5, 2010, 2:02:27 AM1/5/10
to

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

Wanja Gayk

unread,
Jan 7, 2010, 1:56:04 PM1/7/10
to
Am 04.01.2010, 13:15 Uhr, schrieb Günther Frings <pseudote...@web.de>:

> 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 ---

Wanja Gayk

unread,
Jan 7, 2010, 1:57:22 PM1/7/10
to
Am 04.01.2010, 13:15 Uhr, schrieb Günther Frings <pseudote...@web.de>:

> 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

Message has been deleted
0 new messages