Für die Wieder Status und Schlüssel einer Datenbank Insert enthält, habe ich die folgende Struktur:Typ Parameter, der Typ-Parameter selbst
sealed trait InsertResult[+I] extends Product with Serializable
object InsertResult {
case class Created[+I](insertedId: I) extends InsertResult[I]
case object DuplicateKey extends InsertResult[Nothing]
}
Der Typ-Parameter I
ist die Art des Schlüssels, der erstellt wurde (zB UUID
). Wenn die Einfügung erfolgreich ist, wird Created[I]
zurückgegeben; Im Falle eines doppelten Schlüsselfehlers wird das Objekt DuplicateKey
zurückgegeben.
Dies funktioniert, aber da die Datenbank nur den Schlüssel mehr Metadaten als fügt hinzu, möchte ich I
von Entity[I, T]
ersetzen, wo I
noch der Schlüsseltyp während T
ist die Art des eingesetzten Objekts darstellt (also im Grunde ein InsertResult[Entity[I, T]]
). Allerdings habe ich Probleme damit, nur den Typparameter zu ersetzen gibt mir einen Fehler für den Parameter insertedId
(I
und T
kann nicht aufgelöst werden). Wie müssen die Typ- und Methodensignaturen aussehen, wenn I
durch Entity[I, T]
ersetzt wird?
wäre es hilfreich, die Signatur der 'insert' Funktion sehen Sie zur Zeit an der richtigen Stelle, das heißt die Funktion, die' kehrt InsertResult' – Andrey
es ist immer noch unklar, was 'T' tatsächlich ist. Sie haben angegeben, dass 'T den Typ des eingefügten Objekts darstellt. Aus Ihrem Kommentar scheint jedoch, dass das eingefügte Objekt tatsächlich eine Unterklasse von Entity ist. Also was ist T? – Andrey
Ah ja, tut mir leid. 'Entity [I, T]' ist eine Case-Klasse, die Erstellung einer Instanz könnte wie folgt aussehen: Entity (neue UUID, new Foo) '. Die Signatur einer konkreten Insert-Implementierung sieht wie folgt aus:
ceran