Die Scala-Klasse kann die Vergleichsmethode von der Java-Schnittstelle, die Java erweitert, nicht überschreiben.util.Komparator
-
29-09-2020 - |
Frage
Ich arbeite gerade an einem Port eines jEdit-Plugins, um den gesamten Code in Scala zu schreiben.Ich bin jedoch ab einem bestimmten Punkt gezwungen, meinen eigenen Komparator zu implementieren.
Mein vereinfachter Code lautet wie folgt:
class compare extends MiscUtilities.Compare {
def compare(obj1: AnyRef, obj2: AnyRef): Int = 1
}
Die Fehlentscheidungen.Compare hat die folgende Signatur, wenn es von IntelliJ aus betrachtet wird
public static interface Compare extends java.util.Comparator {
int compare(java.lang.Object o, java.lang.Object o1);
}
Wenn ich jedoch versuche, meine Klasse zu kompilieren, wird eine Fehlermeldung angezeigt:
Fehlermeldung:der Klassenvergleich muss abstrakt sein, da der Methodenvergleich im Merkmalsvergleicher vom Typ (x $ 1) erfolgt:T,x$2:T) Int ist nicht definiert Klassenvergleich erweitert Fehlfunktionen.Vergleichen {
Ich habe es auch mit Any und Java versucht.lang.Objekt als Typen, aber bisher kein Glück.
Hilfe wird sehr geschätzt :)
Grüße Stefan
Lösung
es kann unmöglich .Wenn das falsch ist, würde ich gerne wissen.
generasacodicetagpre.Andere Tipps
Das Erstellen eines eigenständigen Beispiels ist der erste Schritt zur Lösung dieser Art von Problemen.
~/code/scratch/raw: cat Compare.java
interface Compare extends java.util.Comparator {
}
~/code/scratch/raw: cat MyCompare.scala
object MyCompare extends Compare {
def compare(a: AnyRef, b: AnyRef) = 0
}
~/code/scratch/raw: scalac MyCompare.scala Compare.java
MyCompare.scala:1: error: object creation impossible, since method compare in trait Comparator of type (x$1: T,x$2: T)Int is not defined
object MyCompare extends Compare {
^
Die Versuchung ist zu verlängern Comparator[AnyRef]
direkt von MyCompare
, zusammen mit Compare
:
object MyCompare extends java.util.Comparator[AnyRef] with Compare {
def compare(a: AnyRef, b: AnyRef) = 0
}
Aber das führt zu:
error: illegal inheritance;
self-type MyCompare.type does not conform to java.util.Comparator[AnyRef]'s selftype java.util.Comparator[AnyRef]
Ich neige also dazu zuzustimmen, dass dies zumindest direkt nicht möglich ist.Schreiben Sie die Klasse in Java und delegieren Sie sie bei Bedarf an Scala.
funktioniert es, wenn Sie [AnyRef] nach Fehlvergnügen.Comp setzt?D. H.,
generasacodicetagpre.Ich habe das mit Java.Util.comParator direkt versucht und der Compiler schien glücklich zu sein.