Using ListView from Scala 2.9.2 with Java 7 gives compile error

谁说我不能喝 提交于 2019-12-06 00:26:19

问题


I'm working on a project that use scala 2.9.2 and java 7.

What I'm trying to do is create a GUI using the scala ListView.

Here's a small code snippet:

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

This gives me the following compile error:

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

I'm guessing this is because in ListView, peer is defined without type parameter:

override lazy val peer: JList = new JList with SuperMixin

So the question is: is it impossible to use the ListView from scala-swing with Java 7?


回答1:


Solved this issue by extending Scala's ListView and adding a "typed peer".

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

    def selectionEmpty = typedPeer.isSelectionEmpty

    // Other functions omitted
}

Works great!




回答2:


The problem is that many swing components have been "generified" in Java 7, leading to incompatibilities. The scala library was certainly compiled toward a version of Java < 1.7. I would advise to compile your scala code against Java 1.6. You can still compile you Java code in Java 1.7 and use it from your scala code, and in additioncode compiled against Java 1.6 can run on a JVM 1.7.

UPDATE: someone stumbled against the same problem: http://comments.gmane.org/gmane.comp.lang.scala.debate/9158




回答3:


I have written a small library SwingPlus which makes it possible to use a ListView both when compiling on Java 6 and Java 7+. The problem (as others have pointed out) is the generification of Swing in Java 7.



来源:https://stackoverflow.com/questions/13253679/using-listview-from-scala-2-9-2-with-java-7-gives-compile-error

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!