2016-10-27 3 views
0

でソートジェネリック結合していない匹敵する、私は次のJavaインタフェースを実装しようとしています:些細な運動の一環として、Scalaの

public interface Sort { 

@SuppressWarnings("rawtypes") 
public ArrayList<Comparable> sort(ArrayList<Comparable> table); 
} 

達成することは非常に簡単であるJavaクラスで。しかし、Scalaの型推論は、Collections.sort()を扱うときは問題があるようです。ここに私のScalaの実装です:

class SortImpl extends Sort { 
    override def sort(table: util.ArrayList[Comparable[_]]): util.ArrayList[Comparable[_]] = { 
    util.Collections.sort(table) 
    table 
    } 
} 

そして、ここでは、私が扱う例を発見したいくつかのテストを実行しているときに私が取得エラー(主にArrayList<Double>ArrayList<Integer>、などとメソッドをテストすること)

Error:(20, 22) inferred type arguments [Comparable[_]] do not conform to method sort's type parameter bounds [T <: Comparable[_ >: T]] 
util.Collections.sort(table) 
       ^
Error:(20, 27) type mismatch; 
found : java.util.ArrayList[Comparable[_]] 
required: java.util.List[T] 
Note: Comparable[_] >: T, but Java-defined trait List is invariant in type E. 
You may wish to investigate a wildcard type such as `_ >: T`. (SLS 3.2.10) 
    util.Collections.sort(table) 
         ^

ですこの問題は次のような特定のクラスのみに適用されます。 Sort unbound Comparable in Scala

また、インターフェイスを変更することはできません。 Scalaでこれを実装する方法はありますか?

答えて

1

それを試してみてください:

scala> import java.{util => u} 
import java.{util=>u} 

scala> def sort[T <: Comparable[T]](t: u.ArrayList[T]):u.ArrayList[T] = { 
     u.Collections.sort(t); t 
     } 
sort: [T <: Comparable[T]](t: java.util.ArrayList[T])java.util.ArrayList[T] 
+0

方法は機能するが、その署名は、インタフェースによって要求されるものとは異なります。 –

+0

ああ、私は今日、後でもっと頑張ります。 – pedrofurla

関連する問題