在Scala中的guava的MinMaxPriorityQueue中输入参数Bounds [T<:Comparable [_]]

时间:2018-02-07 11:10:08

标签: scala guava comparable type-bounds

尝试使用guava库创建TypeError: encoder expected a mapping type but got: ...我遇到以下问题:

这有效:

MinMaxPriorityQueue

但这不是:

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

就我在搜索[1]时发现的情况而言,这可能是因为Java将scala的val q: MinMaxPriorityQueue[Double] = MinMaxPriorityQueue. maximumSize(10). create() q.add(1.0) 视为Java中的Double,并且它不支持double。所以我试过这个:

Comparable

这样可行,但是当我尝试添加另一个元素时:

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

失败了:

a.add(2.3)

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

我还尝试编写类型视图

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

出现同样的错误。

有解决方法吗?

1 个答案:

答案 0 :(得分:1)

或许使用java.lang.Double

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

应该工作。