Ich versuche eine Basisklasse zum Erstellen, Lesen, Aktualisieren und Löschen von Objekten zu implementieren. Ich bin mir sicher, dass ich eine Bibliothek dafür finden könnte, aber ich mache es selbst für Bildungszwecke.
Also habe ich es so gemacht, dass alles, was gespeichert wird, Entitäten sind und sie einen Identifier eines bestimmten Typs haben:
%Vor% Entitäten sind serialisierbar und ihre Kennung ebenfalls. Dann habe ich meine EntityPersistor
, die Entität von ihrem Inhalt speichern soll (mit Serialisierung) und benennen sie von ihrem Schlüssel. Meine einzige Implementierung dieses Persistors ist jetzt das Speichern auf der Festplatte. Es verwendet den Bezeichner als Namen der Datei, in der er gespeichert werden soll.
Hier ist mein Entity Persistor:
%Vor%Das Problem ist also, dass ich den Typ für den Schlüssel zweimal neu definieren muss, wenn ich ihn verwenden möchte. Ich würde gerne schreiben:
%Vor%, aber es ergibt sich ein Compilerfehler. Also muss ich es so benutzen:
%Vor%was unpraktisch ist.
Gibt es einen Workaround oder einen besseren Weg, das zu tun? Ich habe das Gefühl, dass meine Erklärung dadurch weniger lesbar wird, aber die Verwendung ist wichtiger.
BEARBEITEN:
Ich habe vergessen, class Product implements Entity<String>
Normalerweise gibt es eine Möglichkeit, das eine oder das andere zu entfernen, aber das Problem ist, dass Sie sowohl K
als auch T
als Parametertypen verwenden.
Es gibt keine Möglichkeit, dem Compiler mitzuteilen, dass der Parameter einer Methode der "innere" generische Typ des Objekts T
(The Entity
) sein soll. Daher benötigen Sie zwei Generika:
Eine für die Bezugnahme auf den "inneren" generischen Typ von Entity
( K
)
Und eins für die Entität selbst: Entity<K>
( T
)
Aufgrund des Löschens von Typen wäre Java nicht in der Lage, den Parametertyp K
zur Laufzeit ohne Ihre Deklaration zu ermitteln.