【问题标题】:Type parameter Bounds [T <: Comparable[_]] in guava's MinMaxPriorityQueue in ScalaScala中番石榴的MinMaxPriorityQueue中的类型参数Bounds [T <:Comparable [_]]
【发布时间】: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


    【解决方案1】:

    也许使用java.lang.Double

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

    应该可以。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-07
      • 1970-01-01
      • 2013-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-04
      相关资源
      最近更新 更多