1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Deutsch
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Generics und Serialization

  • GHOUST
  • 28. Oktober 2006 um 21:11
  • Unerledigt
  • GHOUST
    2
    GHOUST
    Mitglied
    Punkte
    15
    Beiträge
    2
    • 28. Oktober 2006 um 21:11
    • #1

    Hallo. Ich habe folgendes Problem. Es geht um Serialiserung von Objekten, und zwar von einem Vector Objekt. Ist es überhaupt möglich einen Vector zu serialisieren?
    Bei der Serialisierung habe ich kein Problem, aber wenn ich es deserialisiere(loadTransactions methode) bekomme ich diese Meldung:
    Note: ./Kassa.java uses unchecked or unsafe operations.
    Note: Recompile with -Xlint:unchecked for details.

    hier ist ein kurzer ausschnitt meines codes:

    Code
    [COLOR=Black][COLOR=#0115c8]Vector[/COLOR][COLOR=#ff0000]<[/COLOR]Zahlung[COLOR=#ff0000]>[/COLOR] verbuchungen [COLOR=#ff0000]=[/COLOR] [COLOR=#0115c8]new[/COLOR] [COLOR=#0115c8]Vector[/COLOR][COLOR=#ff0000]<[/COLOR]Zahlung[COLOR=#ff0000]>();
    [/COLOR][/COLOR].......
    
    
    [COLOR=#ff0000]void saveTransactions () {
     try {
        ObjectOutputStream objectOut = new ObjectOutputStream (new FileOutputStream ("data.bin"));
        objectOut.writeObject(verbuchungen);
        objectOut.close();
          }
         catch (IOException e) {System.out.println("greska neka"); System.exit(1);}
      }
    
    
    void loadTransactions () {
        try {
           ObjectInputStream objectIn = new ObjectInputStream ( new FileInputStream("data.bin"));
            Object temp = objectIn.readObject();
            verbuchungen = (Vector)temp;
            objectIn.close();
            }
            catch (IOException e) { System.exit(1);}
            catch (ClassNotFoundException e) {System.exit(1);}
     }
    
    
    [/COLOR]
    Alles anzeigen

    Ich bin ziemlich sicher dass es um Generics geht, also casting von Typen. Hat wer eine Idee, wie ich das lösen könnte?

    "...In God we trust but just incase keep it loaded and locked ready to rock and shake the spot..."
    The Foundation

    Si vis pacem, para bellum.

  • a9bejo
    21
    a9bejo
    Mitglied
    Reaktionen
    42
    Punkte
    4.697
    Beiträge
    913
    • 29. Oktober 2006 um 11:03
    • #2

    Du serialisierst ein Objekt vom Typ Vector<Zahlung> aber Du deserialisierst es als ein Objekt vom Typ Vector .

    ersetze mal

    verbuchungen = (Vector)temp;

    durch

    verbuchungen = (Vector<Zahlung>)temp;

    Du bekommst dann immern noch eine (andere) warnung, weil die Type informaitonen beim Serialisieren leider veroren gehen. Du kannst diese Wahrnung aber getrost ignorieren, denn du weisst ja das das Objekt vom Type Vector<Zahlung> ist.

    lg, Benjamin Ferrari, bookworm.at

  • GHOUST
    2
    GHOUST
    Mitglied
    Punkte
    15
    Beiträge
    2
    • 30. Oktober 2006 um 07:16
    • #3

    Das war auch eine von hundert Kombinationen die ich probierte, und lieferte kein Erfolg. Dh. Compiler spuckt "...unsafe or unchecked operations" Meldung aus.

    Das Programm würde auch so funktionieren, aber ich brauche es so, dass Compiler keine Fehlermeldungen ausgibt. Ich habs geschafft, indem ich den Inhalt von Vector speichere und nicht das ganze Vector. Es sieht jetzt so aus:

    Code
    [COLOR=#0115C8]void[/COLOR] saveTransactions [COLOR=#FF0000]()[/COLOR] [COLOR=#FF0000]{[/COLOR]
    	[COLOR=#0115C8]try[/COLOR] [COLOR=#FF0000]{[/COLOR]
    	[COLOR=#0115C8]ObjectOutputStream[/COLOR] objectOut [COLOR=#FF0000]=[/COLOR] [COLOR=#0115C8]new[/COLOR] [COLOR=#0115C8]ObjectOutputStream[/COLOR] [COLOR=#FF0000]([/COLOR][COLOR=#0115C8]new[/COLOR] [COLOR=#0115C8]FileOutputStream[/COLOR] [COLOR=#FF0000]([/COLOR][COLOR=#157A6C]"data"[/COLOR][COLOR=#FF0000]));[/COLOR]
    	[COLOR=#0115C8]int[/COLOR] anzahlVerbuchungen [COLOR=#FF0000]=[/COLOR] verbuchungen[COLOR=#FF0000].[/COLOR]size[COLOR=#FF0000]();[/COLOR]
    	objectOut[COLOR=#FF0000].[/COLOR]writeInt[COLOR=#FF0000]([/COLOR]anzahlVerbuchungen[COLOR=#FF0000]);[/COLOR]
    	[COLOR=#0115C8]for[/COLOR] [COLOR=#FF0000]([/COLOR][COLOR=#0115C8]int[/COLOR] i [COLOR=#FF0000]=[/COLOR] 0[COLOR=#FF0000];[/COLOR] i [COLOR=#FF0000]<[/COLOR] verbuchungen[COLOR=#FF0000].[/COLOR]size[COLOR=#FF0000]()[/COLOR] [COLOR=#FF0000];[/COLOR] i[COLOR=#FF0000]++)[/COLOR] [COLOR=#FF0000]{[/COLOR]
    		objectOut[COLOR=#FF0000].[/COLOR]writeObject[COLOR=#FF0000]([/COLOR]verbuchungen[COLOR=#FF0000].[/COLOR]get[COLOR=#FF0000]([/COLOR]i[COLOR=#FF0000]));[/COLOR]
    	[COLOR=#FF0000]}[/COLOR][COLOR=#808080][/COLOR]
    	objectOut[COLOR=#FF0000].[/COLOR]flush[COLOR=#FF0000]();[/COLOR]
    	objectOut[COLOR=#FF0000].[/COLOR]close[COLOR=#FF0000]();[/COLOR]
    	[COLOR=#FF0000]}[/COLOR]
    	[COLOR=#0115C8]catch[/COLOR] [COLOR=#FF0000]([/COLOR][COLOR=#0115C8]IOException[/COLOR] e[COLOR=#FF0000])[/COLOR] [COLOR=#FF0000]{[/COLOR][COLOR=#0115C8][/COLOR][COLOR=#FF0000][/COLOR][COLOR=#0115C8]System[/COLOR][COLOR=#FF0000].[/COLOR]exit[COLOR=#FF0000]([/COLOR]1[COLOR=#FF0000]);}[/COLOR]
    [COLOR=#FF0000]}[/COLOR]
    [COLOR=#0115C8]void[/COLOR] loadTransactions [COLOR=#FF0000]()[/COLOR] [COLOR=#FF0000]{[/COLOR]
    	[COLOR=#0115C8]try[/COLOR] [COLOR=#FF0000]{[/COLOR]
    	[COLOR=#0115C8]ObjectInputStream[/COLOR] objectIn [COLOR=#FF0000]=[/COLOR] [COLOR=#0115C8]new[/COLOR] [COLOR=#0115C8]ObjectInputStream[/COLOR] [COLOR=#FF0000]([/COLOR] [COLOR=#0115C8]new[/COLOR] [COLOR=#0115C8]FileInputStream[/COLOR][COLOR=#FF0000]([/COLOR][COLOR=#157A6C]"data"[/COLOR][COLOR=#FF0000]));[/COLOR]	
    	[COLOR=#0115C8]int[/COLOR] anzahlVerbuchungen [COLOR=#FF0000]=[/COLOR] objectIn[COLOR=#FF0000].[/COLOR]readInt[COLOR=#FF0000]();[/COLOR]
    	[COLOR=#0115C8]for[/COLOR] [COLOR=#FF0000]([/COLOR][COLOR=#0115C8]int[/COLOR] i [COLOR=#FF0000]=[/COLOR] 0[COLOR=#FF0000];[/COLOR] i [COLOR=#FF0000]<[/COLOR] anzahlVerbuchungen[COLOR=#FF0000];[/COLOR] i[COLOR=#FF0000]++)[/COLOR] [COLOR=#FF0000]{[/COLOR]
    		verbuchungen[COLOR=#FF0000].[/COLOR]add [COLOR=#FF0000](([/COLOR]Zahlung[COLOR=#FF0000])[/COLOR] objectIn[COLOR=#FF0000].[/COLOR]readObject[COLOR=#FF0000]());[/COLOR]					
    	[COLOR=#FF0000]}[/COLOR]		[COLOR=#808080][/COLOR]
    	objectIn[COLOR=#FF0000].[/COLOR]close[COLOR=#FF0000]();[/COLOR]
    	[COLOR=#FF0000]}[/COLOR]
    	[COLOR=#0115C8]catch[/COLOR] [COLOR=#FF0000]([/COLOR][COLOR=#0115C8]IOException[/COLOR] e[COLOR=#FF0000])[/COLOR] [COLOR=#FF0000]{[/COLOR][COLOR=#0115C8][/COLOR][COLOR=#FF0000]}[/COLOR]
    	[COLOR=#0115C8]catch[/COLOR] [COLOR=#FF0000]([/COLOR][COLOR=#0115C8]ClassNotFoundException[/COLOR] e[COLOR=#FF0000])[/COLOR] [COLOR=#FF0000]{[/COLOR][COLOR=#0115C8][/COLOR][COLOR=#FF0000]}[/COLOR]
    [COLOR=#FF0000]}
    Alles anzeigen


    [/COLOR]

    "...In God we trust but just incase keep it loaded and locked ready to rock and shake the spot..."
    The Foundation

    Si vis pacem, para bellum.

  • a9bejo
    21
    a9bejo
    Mitglied
    Reaktionen
    42
    Punkte
    4.697
    Beiträge
    913
    • 30. Oktober 2006 um 09:01
    • #4

    Hallo Ghoust. Deine Loesung ist doch arg umstaendlich, vor allem da du dieses problem bei deinem naechsten programm wahrscheinlich gleich wieder haben wirst.

    Die Warnung, die du nach

    Code
    Vector<Zahlung> foo = (Vector<Zahlung>) object;

    bekommst ist kein Fehler, sondern eigentlich ein bug, der auf die Technik zurueckzufuehren ist, mit der in Java Generics umgesetzt wurden.

    Code
    Vector foo = (Vector) object;

    waere z.B. genauso unsicher, aber hier gibt es keine Warnung beim Casten.

    Wenn Du die Warnung einfach nicht mehr sehen willst, schreibe

    @SuppressWarnings("unchecked")

    vor die zeile und sie ist weg.

    Naeheres zu diesem Problem findest Du z.B. hier:

    http://forum.java.sun.com/thread.jspa?th…ssageID=4097246

    lg, Benjamin Ferrari, bookworm.at

  • Maximilian Rupp 27. Dezember 2024 um 12:05

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung

  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  • Deutsch
  • English
Zitat speichern