Avatar billede ng-km Nybegynder
03. august 2008 - 08:14 Der er 5 kommentarer

Ny version af en klasse

Jeg har et program men en klasse der eksempelvis indeholder attributter med navn og adresse. Klassen er serialiseret og de oprettede objekter ligger gemt i en vector på min harddisk.

Hvis jeg nu vil udvide klassen med f.eks cpr nummer, hvordan får jeg så læst den gamle klasse (fra min gemte fil) ind i den nye klasse, der hedder det samme men er blevet ændret.

Kort fortal er der lavet en ny version af mit program og når brugeren har opgraderet til den nye version, skal programmet selv konvertere den gamle klasse når programmet åbnes.

Jeg har kigget lidt rundt i spørgsmålene, og kan ikke rigtig finde ud af om det er Classloader jeg skal bruge.

Hvordan får jeg konverteret min gamle klasse til den nye?
Avatar billede schwarz84 Nybegynder
03. august 2008 - 13:01 #1
Det er slet ikke meningen at du skal bruge serialisering til at gemme data på den måde. Du bør lave en måde at gemme dataene på som kan skrive dem ud på disken uafhængigt at din konkrete version/implementation. Det gøres bedst ved at gemme som XML.
Avatar billede arne_v Ekspert
03. august 2008 - 16:46 #2
Serialisering er meget dårligt til at persistere data netop fordi det kan give
problemer hvis klasserne ændrer sig (men udmærket til at flytte data over socket og lignende).

XML serialisering har ihvertfald en fordel. Hvis det er gået i ged, så åbner du XML filen
og retter den til det nye format med en editor !

Men jeg tror at du er heldig. Hvis du kun tilføjer et felt, så bør du kunne deserialize
instanser af den gamle klasse med den nye klasse, hvis du giver den nye
klasse en serialVersionUID som svarer til den gamle (du får den gamle at vide
i en exception når du forsøger at læse uden !).

Hvornår serialiserede klasser er kompatible med nye versioner beskrevet
i et dokument fra SUN:

http://java.sun.com/javase/6/docs/platform/serialization/spec/version.html
Avatar billede ng-km Nybegynder
03. august 2008 - 20:47 #3
schwarz84: Jeg har godt nok set at Java indeholder nogle XML funktioner, men jeg ved ikke lige hvordan jeg skal bruge dem. Kan du vise et simpelt eksempel på hvordan jeg får skrevet klassens data ud på disken. Hvordan er hastigheden med denne metode jeg har omkring 50.000 objekter der hver indeholder ca 40 felter.

arne: Jeg læser lige stoffet igennem, og prøver at give min klasse det rigtige ID. Jeg håber det virker, for det lyder som om det er den nemmeste løsning lige nu. Der er dog ingen tvivl om at jeg nok skal overveje at gå over til en anden form for persistens.
Avatar billede arne_v Ekspert
03. august 2008 - 21:33 #4
Hvis dine klasser har pæne get og set så kan du bruge XMLEncoder & XMLDecoder.
Avatar billede arne_v Ekspert
28. oktober 2008 - 23:42 #5
ng-km ?
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