【发布时间】:2018-02-07 11:10:08
【问题描述】:
尝试使用 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())
这给出了同样的错误。
有解决办法吗?
【问题讨论】:
标签: scala guava comparable type-bounds