Scala 中 guava 的 MinMaxPriorityQueue 中的类型参数 Bounds [T <: Comparable[_]]

Type parameter Bounds [T <: Comparable[_]] in guava's MinMaxPriorityQueue in Scala

尝试使用 guava 库创建 MinMaxPriorityQueue 我遇到了以下问题:

这个有效:

val q: MinMaxPriorityQueue[String] = MinMaxPriorityQueue.
      maximumSize(10).
      create()
q.add("1.0")

但这不是:

val q: MinMaxPriorityQueue[Double] = MinMaxPriorityQueue.
      maximumSize(10).
      create()
q.add(1.0)

据我在搜索 [1] 时发现,这可能是因为 Java 将 scala 的 Double 视为 Java 中的 double,而且它不支持 Comparable。所以我试过了:

val q: MinMaxPriorityQueue[Comparable[Double]] = MinMaxPriorityQueue.
      maximumSize(10).
      create()
q.add(1.0)

这有效,但是当我尝试添加另一个元素时:

a.add(2.3)

失败:

java.lang.ClassCastException: scala.runtime.RichDouble cannot be cast to java.lang.Double

似乎与[1]中提到的问题有关。

我也试过写一个Type View:

class Test[A <% Comparable[A]](val q: MinMaxPriorityQueue[A])
val a = new Test[Double](MinMaxPriorityQueue.create())

这给出了同样的错误。

是否有解决此问题的解决方法?

也许使用java.lang.Double

 val q: MinMaxPriorityQueue[java.lang.Double] = ...

应该可以。