Die Scala-Klasse kann die Vergleichsmethode von der Java-Schnittstelle, die Java erweitert, nicht überschreiben.util.Komparator

StackOverflow https://stackoverflow.com/questions/3329001

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

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top