Wie von @ntn angegeben, ist der abgeleitete Typ Ihrer Liste - die kleinste Obergrenze der beiden Elemente - Product with Serializable with Common
. Da scala.Ordering
in seinem Typparameter nicht kontravariant ist, schlägt die implizite Auflösung fehl, da Ordering[Common] <: Ordering[Product with Serializable with Common]
nicht enthalten ist.
Sie können dies umgehen, indem Sie die implizite Reihenfolge so schreiben, dass sie immer den genauen Typ des betrachteten impliziten Parameters enthält:
%Vor%Oder für die Prägnanz:
%Vor% Wenn Sie die Fallklasse für A und B (oder auch nur für eine davon) entfernen, funktioniert es.
Für List(A(), B()).sorted
findet sich kein Ordering
für Product with Serializable with C
, da die Basisklasse für A und B Produkt mit C ist (da A und B beide Fallklassen sind).
Wenn Sie eine Liste mit Elementen zweier verschiedener Basistypen erstellen, nehme ich an, dass Sie eine Liste vom Typ List[C]
haben möchten, in der Sie die Elemente deklarieren können, bevor Sie sie verwenden (oder sie von einer Funktion erhalten, die den Typ% zurückgibt). co_de%.