Введите параметр Bounds [T ‹: Comparable[_]] в MinMaxPriorityQueue гуавы в Scala

Пытаясь создать MinMaxPriorityQueue с помощью библиотеки guava, у меня возникла следующая проблема:

Это работает:

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 обрабатывает Double scala как double в Java, и он не поддерживает 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())

Что дает ту же ошибку.

Есть ли обходной путь, чтобы исправить это?


person ElBaulP    schedule 07.02.2018    source источник


Ответы (1)


Возможно, использовать java.lang.Double?

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

Должно сработать.

person Dima    schedule 07.02.2018