Scala 中的通用实现 von java.util.Comparator

Generic implementation von java.util.Comparator in Scala

我在 Java 和 Scala 中使用 twirl 模板。所以我试图在模板中对列表进行排序,但我不知道如何覆盖 Comparator 方法。

我的列表包含 class 设计如下的对象:

class Foo extends BaseFoo<Foo>

class BaseFoo 确实有一个名为

的方法
public String FooName() {/*returns some Name of Foo*/}

在我的 scala twirl 模板中它看起来像:

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);
       }
})

但这似乎无法编译:

class type required but java.util.ArrayList[_ <: BaseFoo[_]] found

不是直接的答案,但鉴于您声明您有一个 Foo 对象列表,直接的解决方案似乎是使用

source: java.util.Collection[_ <: Foo[_]]

或类似的东西!

含义:当列表包含 Foo 对象时,这些对象是来自 Object 还是来自 FooBase 有什么关系?!

您可以将 source 转换为 Scala 集合类型,然后仅对其调用 .sortBy。不需要 Comparators:

import collection.JavaConverters._
source.asScala.toSeq.sortBy(_.FooName)