1

尝试创建一个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 将 scalaDouble视为doubleJava 中的 a,而不支持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())

这给出了同样的错误。

有没有解决方法来解决这个问题?

4

1 回答 1

1

java.lang.Double也许使用?

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

应该管用。

于 2018-02-07T12:12:30.543 回答