toss Skrevet 14. april 2009 Del Skrevet 14. april 2009 (endret) Hei! Jeg jobber med å lage et medlemssystem som lagrer medlemmer i en txt-fil og gir mulighet for å gi en oversikt over, og redigere medlemmer. To av læringsmålene er generikk og grafisk brukergrensesnitt. Foreløpig holder jeg på med det helt grunnleggende. Målet er å lage et system hvor det er relativt lett å lage til nye typer medlemmer. Tenker å bruke en ArrayList til å holde styr på medlemmene, men jeg klarer ikke å legge medlemmene til samlingen når de konverteres fra tekstfil. Dette forsøker jeg å gjøre med en egen konstruktør som bare tar imot en streng som argument, og kalle samling.add(index, new T(str)); class MedlemsAdmin<T extends Medlem> { private String[] feltTab; private String filbane; private List<T> samling; /** * Konstruktør * Oppretter samling av T, og oppretter GUI med liste over medlemmer */ MedlemsAdmin(String[] feltTab, String filbane) { this.feltTab = feltTab; this.filbane = filbane; // Opprette samling av medlemmer. samling = new ArrayList<T>(); try { FileReader tekstFilLeser = new FileReader(filbane); BufferedReader tekstLeser = new BufferedReader(tekstFilLeser); int antallMedlemmer = Integer.parseInt(tekstLeser.readLine()); for(int i = 0; i < antallMedlemmer; i++) { samling.add(i, new T(tekstLeser.readLine())); } } catch (IOException e) { System.out.println("Feil ved lesing av medlemmer"); } // Skrive ut tabell (Opprette GUI) } } Jeg får følgende feilmelding: File: C:\Users\Torstein\Documents\Java\Medlemsystem\Versjon 0.2\MedlemsSystem\MedlemsAdmin.java [line: 42] Error: C:\Users\Torstein\Documents\Java\Medlemsystem\Versjon 0.2\MedlemsSystem\MedlemsAdmin.java:42: unexpected type found : type parameter T required: class Noen tips til hvordan jeg kan løse dette problemet? Tregner dere å se mer kode for å avgjøre det? EDIT: leif Endret 14. april 2009 av toss Lenke til kommentar
blackbrrd Skrevet 14. april 2009 Del Skrevet 14. april 2009 Du har ingen klasse som heter T. Lenke til kommentar
toss Skrevet 14. april 2009 Forfatter Del Skrevet 14. april 2009 Det er jeg klar over, men hvordan kan jeg gjøre dette slik at jeg ikke må endre denne klassen, MedlemsAdmin<>, men det vil gjelde alle klasser som utvider Medlem? Går det ikke ann å kalle konstruktøren til klassen som er representert av T? Lenke til kommentar
oyvind_b Skrevet 15. april 2009 Del Skrevet 15. april 2009 Nei, det går dessverre ikke. Dette er fordi at du "compile-time" ikke vet hva T er (selv om du vet at den arver fra Medlem), og derfor ikke hvilke constructors den har tilgjengelig. Øyvind. Lenke til kommentar
steingrim Skrevet 15. april 2009 Del Skrevet 15. april 2009 Litt off-topic, men i C# kan du faktisk angi at T må ha en default constructor nettopp for å gjøre dette mulig. Lenke til kommentar
blackbrrd Skrevet 15. april 2009 Del Skrevet 15. april 2009 I java så kan en klasse arve fra T og så sette en constructor private, noe som gjør at dette ikke går. Lenke til kommentar
toss Skrevet 15. april 2009 Forfatter Del Skrevet 15. april 2009 Løste det ved å sende et objekt av klassen T representerer til den andre konstruktøren, for så å endre tilstand på dette objektet og klone det. Med litt typekonverteringer og noen ekstra metoder gikk det fint.. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå