ArrayList: problem mit get();
-
ich hab eine java.util.ArrayList
darin füge ich elemente ein!die elemente sind vom typ Socket (java.net.Socket)!
da jede klasse von der klasse Objekt erbt, tut diese es auch!ich füge in meine Array-liste ein Socket-element ein (das funktioniert noch)
wenn ich jedoch ein element wieder auslesen will, wird ein Objekt
zurückgegeben!wie kann ich bei dem ausgelesenen objekt-element entweder auf die Socket-methoden zugreifen oder gleich ein Socket-element auslesen?
Socket sock = array.get(0); // geht nicht!!
Objekt obj = array.get(0); // funktioniert
-
könnte es eventuell irgendwie so gehen:
Objekt elem = new Socket();
elem = array.get(0);
???
oder vl so:
Socket elem = new Socket();
elem = (Socket) array.get(0);
???
-
Wenn du die neuen Möglichkeiten der Collections nicht nutzt musst du einen Cast auf das Object machen.
Socket s = (Socket)list.get(0);
Gefährlich an dem Cast ist halt, dass du den nicht ohne Überprüfung auf Typgleichheit machen solltest. Also in etwa:
Socket s = null; Object myObject = list.get(0); if (myObject instanceOf Socket) s = (Socket)myObject;
Benutzt du allerdings die Generics kannst du auch ohne den Cast das bewerkstelligen. Dafür muss aber deine ArrayList-Instanz ein wenig anders definiert werden.
ArrayList<Socket> myList = new ArrayList<Socket>();
-
des funktioniert so leider nicht!
weder das überprüfen ob es die klasse is, noch generics ...
-
gibt es eigentlich im j2ee SDK auch was besseres wie die ArrayList???
sowas wie std::list in C++??
-
Der Code von CengizS ist absolut richtig. Es funktioniert nicht ist eine zieml. unpräzise Aussage, vielleicht solltest du mal die Fehlermeldung posten.
Generics funktionieren erst ab Java 1.5! Welche SDK benutzt du?Äquivalent zu C++ std::list ist LinkedList, schau doch einfach in der Doc nach. Steht alles drin.
-
ja hab j2ee 1.4
deswegen geht das mit den generics nicht!habs jetzt mit cast gemacht!
-
ja hab j2ee 1.4
deswegen geht das mit den generics nicht!Exakt, genau deswegen geht es nicht. Wie schon gesagt, Generics ab 5.0!
Desweiteren ist das J2EE ja eh ein etwas "beschnittenes" JDK