[英]Generic implementation von java.util.Comparator in Scala
我正在Java和Scala中使用旋轉模板。 因此,我正在嘗試對模板中的列表進行排序,但我不知道如何覆蓋Comparator方法。
我的列表包含設計如下類的對象:
class Foo extends BaseFoo<Foo>
BaseFoo類確實有一個稱為
public String FooName() {/*returns some Name of Foo*/}
在我的scala旋轉模板中,它看起來像:
source: java.util.Collection[_ <: BaseFoo[_]]
在旋轉模板中不嘗試排序:
@Collections.sort(
new util.ArrayList[_ <: BaseFoo[_]](source),
new Comparator[_ <: BaseFoo[_]] {
override def compare(o1: BaseFoo, o2: BaseFoo) = {
return o1.FooName.compareTo(o2.FooName);
}
})
但這似乎無法編譯:
類類型為必需,但是找到了java.util.ArrayList [_ <:BaseFoo [_]]
這不是一個直接的答案,但是假設您聲明有一個Foo對象列表,那么直接的解決方案似乎是使用
source: java.util.Collection[_ <: Foo[_]]
或類似的東西!
含義:當列表包含Foo對象時,如果這些對象來自Object或FooBase,那又有什么關系呢?
您可以將source
轉換為Scala集合類型,然后在其上調用.sortBy
。 不需要Comparator
:
import collection.JavaConverters._
source.asScala.toSeq.sortBy(_.FooName)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.