Auf Thema antworten

Danke euch für eure Meinung. Vor allem: Das was ich bisher erst vermutet hatte, habe ich jetzt ausgetestet:


Dieses "Ich caste einfach eine ArrayList" birgt die Gefahr einer ClassCastException beim Zugriff auf die Daten!


Dazu habe ich jetzt schnell mal einen UnitTest geschrieben, der das einfach mal zeigt:

[CODE=java]package de.kneitzel.so;


import org.junit.jupiter.api.Assertions;

import org.junit.jupiter.api.Test;


import java.awt.*;

import java.io.*;

import java.util.ArrayList;


import static org.junit.jupiter.api.Assertions.*;


public class BinarySerializationFailure {


    @Test

    public void testBinarySerialization() {

        ArrayList<String> objects = new ArrayList<>();

        objects.add("Some String");


        try ( FileOutputStream fileOut = new FileOutputStream("account.ser");

                ObjectOutputStream out = new ObjectOutputStream(fileOut)) {

            out.writeObject(objects);

        } catch (Exception ex) {

            fail("Exception!", ex);

        }


        ArrayList<Point> loadedList = null;

        try (

                FileInputStream fileIn = new FileInputStream("account.ser");

                ObjectInputStream in = new ObjectInputStream(fileIn)) {

            loadedList = (ArrayList<Point>) in.readObject();

        } catch (Exception ex) {

            fail("Exception!", ex);

        }


        // Assert, that we was able to load the data.

        assertEquals(1, loadedList.size());


        // So whenever we try to access, we get an exception:

        ArrayList<Point> finalLoadedList = loadedList;

        assertThrows(ClassCastException.class, () -> {

            Point point = finalLoadedList.get(0);

        });

    }

}

[/CODE]


Aber ein Punkt ist richtig: Ich bringe erst den Code und die Anmerkungen danach. Die werden dann einfach übersehen. Das kann die Downvotes erklären. Aber das zeigt, das die Leute sich einfach zu wenig Zeit nehmen ....



Oben