Avatar billede learnmejava Nybegynder
13. november 2002 - 16:00 Der 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?
Avatar billede disky Nybegynder
13. november 2002 - 16:08 #1
Fordi Vector's toString() metode kun udskrive referencen til Vector objektet.

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.

Årsagen til at det er sådanne skyldes at Vector klassen jo ikke har den fjerneste chance for at vide hvordan du ønsker data udskrevet.
Avatar billede carstenknudsen Nybegynder
13. november 2002 - 16:38 #2
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?:)
Avatar billede disky Nybegynder
13. november 2002 - 16:46 #3
Nå ja det er også korrekt :)

Men egentligt ligegyldigt, for de almindelig datatypers toString() udskriver alligevel ikke noget brugbart information.

p.s. Brug ArrayList istedet for, den performer bedre.
Avatar billede carstenknudsen Nybegynder
13. november 2002 - 17:27 #4
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.
Avatar billede disky Nybegynder
13. november 2002 - 17:32 #5
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.
Avatar billede carstenknudsen Nybegynder
14. november 2002 - 10:35 #6
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.
Avatar billede disky Nybegynder
14. november 2002 - 10:58 #7
Nej det gør det ikke, output er i 99.9% tilfælde ikke formatteret som jeg ønsker,

Og hvad hvis jeg har objekter der består af meget blandet data ?

.toString() er kun lavet for at de er implementeret for at sikre at klassen ikke er abstrakt.
Avatar billede carstenknudsen Nybegynder
14. november 2002 - 11:19 #8
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.
Avatar billede disky Nybegynder
14. november 2002 - 13:48 #9
Som derfor selv skal implementeres af udvikleren af de objekter der er lagt i vectoren, nøjagtig som jeg har beskrevet det.

Altså man kan ikke bare bruge toString() til noget fornuftigt uden selv at implementere den.

.toString() er NETOP defineret i object klassen for at den ikke er abstract.
Avatar billede disky Nybegynder
14. november 2002 - 13:50 #10
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.
Avatar billede carstenknudsen Nybegynder
14. november 2002 - 14:08 #11
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.
Avatar billede disky Nybegynder
14. november 2002 - 14:38 #12
Ja og hvad så ?

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.
Avatar billede carstenknudsen Nybegynder
14. november 2002 - 21:09 #13
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."
Avatar billede disky Nybegynder
14. november 2002 - 21:14 #14
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å.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester