스칼라 클래스는 java.util.comparator를 확장하는 Java 인터페이스의 비교 메서드를 재정의할 수 없습니다.

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

문제

저는 현재 Scala에서 모든 코드를 작성하기 위해 jEdit 플러그인 포트 작업을 하고 있습니다.그러나 나는 어느 시점에서 내 자신의 비교기를 구현하도록 강요 받았습니다.

내 단순화된 코드는 다음과 같습니다.

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

IntelliJ에서 보면 MiscUtilities.Compare에는 다음과 같은 서명이 있습니다.

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

그러나 내 클래스를 컴파일하려고 할 때 다음과 같은 오류가 발생합니다.

오류:(x$1:T,x$2:T)Int가 정의되지 않았습니다 비교 클래스는 MiscUtilities.Compare를 확장합니다

나는 또한 Any와 java.lang.Object를 유형으로 사용해 보았지만 지금까지는 운이 없었습니다.

도움을 주시면 매우 감사하겠습니다 :)

감사합니다 스테판

다른 팁

이러한 종류의 문제를 해결하기 위한 첫 번째 단계는 독립형 예제를 생성하는 것입니다.

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

연장하고 싶은 유혹 Comparator[AnyRef] 직접적으로 MyCompare, 와 함께 Compare:

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

그러나 이로 인해 다음이 발생합니다.

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

그래서 나는 이것이 적어도 직접적으로는 불가능하다는 데 동의하고 싶습니다.필요한 경우 Scala에 위임하여 Java로 클래스를 작성합니다.

은 miscutilities.compare 후 [AnyRef]를 넣으면 작동합니까?I.e.,

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

java.util.Comparator에서 직접 해보고 컴파일러가 행복해 보였습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top