Hallo zusammen,
jetzt muss ich doch einmal hier einmal nach euren Meinungen fragen, denn ich scheine einen wichtigen Punkt zu übersehen.
Die Kernproblematik ist folgende:
Da gibt es dann aber natürlich eine Warnung, denn das ist ein unsafe cast.
Daher war die Überlegung von mir, dass man hier ja sehr wohl einfach den Typ prüfen kann. Das Problem ist jedoch: Generic type erasure. Wenn ich also die Typen prüfen will, dann muss ich im Code nicht nur auf ArrayList prüfen sondern auch die Elemente. Das kann man natürlich einfach in Code schreiben - das würde dann so in der Art aussehen:
Und dann ist natürlich wichtig: Wenn man das in einer eigenen Klasse kapseln würde, wäre es einfacher. Denn dann würde lediglich die erste Prüfung notwendig sein und die Elemente wären nicht mehr zu prüfen.
Habe ich hier wichtige Punkte übersehen? Sehe ich da etwas falsch?
Irgend etwas muss ich übersehen, denn das alles hat auf SO stattgefunden und ich habe downvotes bekommen. Ein Kommentar "Those warnings are unavoidable" bekam upvotes ...
In RuntimeExceptions zu laufen (ClassCastException) ist ein schlechter Stil, daher würde ich immer die aktive Prüfung vorziehen. Alleine schon um so Warnungen zu vermeiden...
Was Downvotes begründen könnte, wären:
Ich wäre hier also wirklich interessiert an Meinungen, was ich hier bei der Antwort falsch gemacht habe. Es geht nicht um irgend eine Rechtfertigung oder so. Aber es schockt mich halt schon etwas, denn man kann ja Kommentare schreiben und dann würde man ggf. nachbessern oder so... Im Augenblick bin ich da etwas geschockt - nachdem ich da ein Jahr nichts mehr gemacht habe ...
jetzt muss ich doch einmal hier einmal nach euren Meinungen fragen, denn ich scheine einen wichtigen Punkt zu übersehen.
Die Kernproblematik ist folgende:
- Es wird eine ArrayList<Entity> per ObjectOutputStream geschrieben.
- Dann wird diese zurück gelesen. Man bekommt ein Object. Jetzt könnte man einfach einen Cast machen a.la.:
ArrayList<Entity> entities = (ArrayList<Entity>) objectInputStream.readObject();
Da gibt es dann aber natürlich eine Warnung, denn das ist ein unsafe cast.
Daher war die Überlegung von mir, dass man hier ja sehr wohl einfach den Typ prüfen kann. Das Problem ist jedoch: Generic type erasure. Wenn ich also die Typen prüfen will, dann muss ich im Code nicht nur auf ArrayList prüfen sondern auch die Elemente. Das kann man natürlich einfach in Code schreiben - das würde dann so in der Art aussehen:
Java:
ArrayList<Employee> employeesList = new ArrayList<>();
try (FileInputStream fis = new FileInputStream("employeeData");
ObjectInputStream ois = new ObjectInputStream(fis);) {
Object readObject = ois.readObject();
if (readObject instanceof ArrayList readArray) {
for (Object element: readArray) {
if (element instanceof Employee employee) {
employeesList.add(employee);
} else {
// Handle here, that your are loading a file that is not what expected, e.g. throw an exception.
}
}
} else {
// Handle here, that your are loading a file that is not what expected, e.g. throw an exception.
}
} catch (IOException ioe) {
ioe.printStackTrace();
} catch (ClassNotFoundException c) {
System.out.println("Class not found");
c.printStackTrace();
}
Und dann ist natürlich wichtig: Wenn man das in einer eigenen Klasse kapseln würde, wäre es einfacher. Denn dann würde lediglich die erste Prüfung notwendig sein und die Elemente wären nicht mehr zu prüfen.
Habe ich hier wichtige Punkte übersehen? Sehe ich da etwas falsch?
Irgend etwas muss ich übersehen, denn das alles hat auf SO stattgefunden und ich habe downvotes bekommen. Ein Kommentar "Those warnings are unavoidable" bekam upvotes ...
In RuntimeExceptions zu laufen (ClassCastException) ist ein schlechter Stil, daher würde ich immer die aktive Prüfung vorziehen. Alleine schon um so Warnungen zu vermeiden...
Was Downvotes begründen könnte, wären:
- die schlechten catches - die ich von der Fragestellung übernommen hatte ... war evtl. ein Fehler ...
- die else nach den if sind erst mit dem Edit eben rein gekommen - da gab es vorab nur einen Kommentar, das ich das halt erst einmal weggelassen habe.
Ich wäre hier also wirklich interessiert an Meinungen, was ich hier bei der Antwort falsch gemacht habe. Es geht nicht um irgend eine Rechtfertigung oder so. Aber es schockt mich halt schon etwas, denn man kann ja Kommentare schreiben und dann würde man ggf. nachbessern oder so... Im Augenblick bin ich da etwas geschockt - nachdem ich da ein Jahr nichts mehr gemacht habe ...