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

Смежные вопросы