13. november 2002 - 16:00Der er
13 kommentarer og 1 løsning
Vector i JAVA
Min metode til at hente data ud af en DB(MySql) ser sådan ud ---------- public Vector getGlider(int gid) throws ClassNotFoundException, SQLException { ResultSet rs = stmt.executeQuery("Select * from GLIDER Where GLIDERID="+ gid); Vector glider = new Vector(); while (rs.next()) { Glider g = new Glider(rs.getString("GLIDERTYPE"), rs.getBoolean("GLIDERSTATUS"), rs.getInt("GLIDERSEATS"), rs.getDouble("GLIDERFLIGHTHOURS")); glider.addElement(g); } System.out.println(glider); return glider; } --------- Min Vector kommer til at se sådan her ud: --------- [Glider@dbcc99] --------- Hvorfor indeholer den ikke de data der er i db'en?
toString() udskriver hashCode i hexadecimalt ikke referencen :) Det kan iøvrigt ikke være java.util.Vector der er tale om, for den skriver alle elementer ud i toString metoden. learnmejava: skulle vist være teachmejava?:)
Der er da mange klasser der har glimrende toString metoder, f.eks. Vector og ArrayList. Det er måske en smagssag, men de fleste klasser i standard API'en har fornuftige toString metoder.
Hverken Vector's eller Arraylist's kan bruges til særligt meget.
De ved jo ikke hvordan de objekter der er i dem skal udskrives. Okay man kan se størrelsen ud fra deres output, men så er et kald til en size() metode nu bedre.
Jeg har personligt aldrig brugt dem til noget som helst fornuftigt.
disky: så synes jeg det er på tide at du prøver at bruge dem, de virker ganske glimrende og har fornuftige definitioner. Smid en række tal (Integer, Double) ind, nogle strenge (String) og så kald toString så vil du finde ud af at det virker fint.
disky: det er forkert det du skriver: toString er defineret i Object og der er derfor ikke problemer med at den er abstrakt. Mht definitionen er den fornuftigt defineret, den bruger nemlig toString for de underliggende elementer i listen, hvilket er det helt naturlige at gøre.
carsten tag og køb og læs bogen 'Effective Java' der står de rigtigt fint dokumenteret hvordan tingene sker og hvordan man selv skulle tage og gøre når man laver sine egne klasser osv.
disky: jeg har haft den i umindelige tider. Jeg skulle lige til at anbefale at du læste i den. Joshua Block er forfatteren til bla AbstractCollection hvor ArrayList etcs toString metode er defineret, du skulle tage og inspicere kildeteksten. Det anbefales netop at bruge toString metoden fra denne klasse hvis du f.eks. har en array af elementer du vil have skrevet ud. Så skriver du bare: Object[] array = ...; System.out.println(Arrays.asList(array)); Det kan vi (blandt meget andet) takke Joshua for! Ang manglende implementering af toString så skyldes det at folk ikke læser dokumentationen, for i den står der tydeligt at man skal levere en tekstuel repræsentation af objektet. Ergo har de der glemmer at override default implementationen ikke fulgt semantikken, og det kan man jo ikke reparere på. PS ang EJ så afviste du for en rum tid siden mit råd om at huske at implementere readResolve (som du havde glemt) med Singleton pattern, der gik du imod Joshua, hmmm.
Som jeg sagde i mit allerførste og godkendte svar 'Du skal lave din egen udskriv metode som så løber igennem dit vector objekt, og f.eks. kalder en udskriv metode i din Glider klasse.'
Netop fordi den almindelige metode til en Vector ikke giver en korrekt udskrift af data i vectoren.
Jeg har aldrig afvist et råd i java gruppen, eftersom jeg aldrig har skrevet et spørgsmål her på sitet !
Bortset fra det er der IKKE noget krav om man SKAL have en readResolve() når man laver singleton's.
Her må jeg henvise til Taming Java Threads der beskriver hvordan du fornuftigt laver en sikker Singleton. I en singleton har du reelt ikke brug for flere metoder end en .getInstance().
Her et eksempel på at .toString() på en Vector() ikke givere et fornuftigt resultat, der er sat ordentligt op: Vector vect=new Vector(); vect.addElement("Hej"); vect.addElement("Med"); vect.addElement("Dig");
System.out.println(vect);
output: [Hej, Med, Dig]
Synes du selv det er særligt pænt ? Jeg gør ikke, derfor som jeg tidligere har sagt pakker man lidt mere avancerede ting ind i klasser og laver korrekt.toString() metoder til disse klasser.
jeg tror egentligt vi mener det samme men snakker forbi hinanden, bortset fra du synes Vector's toString() kan bruges til noget fornuftigt, hvilket jeg bestemt ikke mener.
Hvordan ville du ellers skrive den liste med tre elementer ud, jeg synes det er helt perfekt med den måde at repræsentere en liste med tre elementer. Det er ikke utænkeligt at vi er enige, men jeg er helt uenig i din kommentar: "Netop fordi den almindelige metode til en Vector ikke giver en korrekt udskrift af data i vectoren."
hvor tit har man specifikt brug for at udskrive det som [Hej, Med, Dig] ? Jeg har endnu aldrig haft brug for den representation.
Måske Hej Med Dig
Eller Hej, Med, Dig
osv, men aldrig med []'ere rundt om, i debuging kan det eventuelt bruges, men ellers er muligheder nok meget få.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.