Пытаясь создать 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())
Что дает ту же ошибку.
Есть ли обходной путь, чтобы исправить это?