私はOrdering
'sを使用したScalaでのソートにある程度慣れていますが、Javaで定義されているいくつかのオブジェクトをソートしたいと思います。それらはComparable
(ではなくComparable[T]
)そしてfinal
:
final class Term implements Comparable { ... }
(これは実際にはLuceneのTermクラスであり、Luceneのバージョンを変更することはできません)。
私は最初、暗黙のどこかにあることを望みました:
terms.sorted //fail - no implicit ordering
だから多分私はそれを注文することができますか?
class OrderedTerm extends Term with Ordering[Term] //fail - class is final
この後、私は使用の厄介さに頼ると思いましたjava.util.Collections.sort
:
Collections.sort(terms) // error: inferred type arguments [org.apache.lucene.index.Term] do not conform to method sort's type parameter bounds [T <: java.lang.Comparable[_ >: T]]
したがって、Scalaは型パラメーターに厳密であるため、これでも機能しないようです。この時点で、2つの方法がわかります。別の明示的な順序を再実装する(悪い)か、Javaでソートを記述する(それほど悪くはない)。
Scalaでこれをきれいに行う方法はありますか?この状況は、レガシーJavaオブジェクトを使用する場合に一般的である可能性があると思いますか?