【发布时间】:2013-12-19 09:51:16
【问题描述】:
我正在使用现有的 java 库练习 scala。将 Array[T] 传递给 func(Array[U]) 是很常见的,其中 T<:u>。例如:
Java:
public class Quick { ...
public static void sort(Comparable[] a) { ... }
}
public class Edge implements Comparable<Edge> { ... }
public class EdgeWeightedGraph { ...
public Iterable<Edge> edges() { ... }
}
斯卡拉:
class Kruskal(private val G: EdgeWeightedGraph) {
init()
private def init() = {
val es = G.edges().asScala.toArray
/* **Error** Type mismatch,
* expected: Array[Comparable[_]],
* actual: Array[Edge]
*/
Quick.sort(es)
...
}
}
我相信这是因为 Array 是不变的。这是我试图规避这一点的尝试,但它看起来丑陋且效率低下:
val es = G.edges().asScala.map(_.asInstanceOf[Comparable[_]]).toArray)
Quick.sort(es)
我该如何以更好的方式做到这一点?
【问题讨论】: