Domanda

Attualmente sto lavorando su un porto di un plugin JEDIT per scrivere tutto il codice in Scala.Tuttavia, sono costretto ad un certo punto per implementare il mio comparatore.

Il mio codice semplificato è il seguente:

class compare extends MiscUtilities.Compare {
  def compare(obj1: AnyRef, obj2: AnyRef): Int = 1
}
.

La sputilities.compare ha la seguente firma quando guarda da Intellij

public static interface Compare extends java.util.Comparator {        
    int compare(java.lang.Object o, java.lang.Object o1);
}
.

Tuttavia quando sto cercando di compilare la mia classe ottengo un errore che dice:

Errore: classe Confronta deve essere astratta, poiché il metodo confronta il comparatore del tratto del tipo (x $ 1: t, x $ 2: t) int non è definito Confronta classe Estende MisCrilloties.comPare {

Ho anche provato con qualsiasi e Java.Lang.Object come tipi, ma non è così lontano.

Guida è molto apprezzata :)

Saluti Stefan

Altri suggerimenti

La produzione di un esempio standalone è il primo passo per risolvere questi tipi di problemi.

 ~/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  {
       ^
.

La tentazione è di estendere Comparator[AnyRef] direttamente da MyCompare, insieme a Compare:

object MyCompare extends java.util.Comparator[AnyRef] with Compare  {
  def compare(a: AnyRef, b: AnyRef) = 0
}
.

Ma questo porta a:

error: illegal inheritance;
 self-type MyCompare.type does not conform to java.util.Comparator[AnyRef]'s selftype java.util.Comparator[AnyRef]
.

Quindi sono propenso ad accettare che questo non è possibile, almeno direttamente.Scrivi la classe in Java, delegata a Scala se necessario.

funziona se si inserisce [Anyref] dopo mistities.comPare?I.e.,

class Compare extends MiscUtilities.Compare[AnyRef] {   
  def compare(a1:AnyRef, a2:AnyRef) = 0       
}
.

L'ho provato con java.util.comparatore direttamente e il compilatore sembrava felice.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top