使用Scala 2.9.2中的ListView和Java 7会产生编译错误

ule*_*jon 6 listview scala java-7 scala-2.9

我正在开发一个使用scala 2.9.2和java 7的项目.

我要做的是使用scala ListView创建一个GUI.

这是一个小代码片段:

private val listView = new ListView[Document](someList)
.
.
.
for (selectedDocument <- listView.peer.getSelectedValuesList) {
    doSomething(selectedDocument)
}
Run Code Online (Sandbox Code Playgroud)

这给了我以下编译错误:

error: something is wrong (wrong class file?): class JList with type parameters [E] gets applied to arguments [], phase = namer for (selectedDocument <- listView.peer.getSelectedValuesList) {
Run Code Online (Sandbox Code Playgroud)

我猜这是因为在ListView中,peer没有类型参数定义:

override lazy val peer: JList = new JList with SuperMixin
Run Code Online (Sandbox Code Playgroud)

所以问题是:使用Java 7中的scala-swing是否无法使用ListView?

ule*_*jon 3

通过扩展 Scala 的 ListView 并添加“类型化对等点”解决了这个问题。

class ExtendedListView[A: ClassManifest] extends ListView[A] {
    lazy val typedPeer: JList[A] = peer.asInstanceOf[JList[A]]

    def selectionEmpty = typedPeer.isSelectionEmpty

    // Other functions omitted
}
Run Code Online (Sandbox Code Playgroud)

效果很好!