首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java7中使用Scala2.9.2中的ListView会出现编译错误

在Java7中使用Scala2.9.2中的ListView会出现编译错误
EN

Stack Overflow用户
提问于 2012-11-06 22:59:55
回答 3查看 475关注 0票数 6

我正在做一个使用scala 2.9.2和java 7的项目。

我想要做的是使用scala ListView创建一个图形用户界面。

下面是一小段代码:

代码语言:javascript
复制
private val listView = new ListView[Document](someList)
.
.
.
for (selectedDocument <- listView.peer.getSelectedValuesList) {
    doSomething(selectedDocument)
}

这给了我以下的编译错误:

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

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

代码语言:javascript
复制
override lazy val peer: JList = new JList with SuperMixin

所以问题是:在Java7中使用scala-swing中的ListView是不可能的吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-13 02:38:50

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

代码语言:javascript
复制
class ExtendedListView[A: ClassManifest] extends ListView[A] {
    lazy val typedPeer: JList[A] = peer.asInstanceOf[JList[A]]

    def selectionEmpty = typedPeer.isSelectionEmpty

    // Other functions omitted
}

效果很好!

票数 3
EN

Stack Overflow用户

发布于 2012-11-07 01:14:54

问题是许多swing组件在Java7中被“泛化”,导致不兼容。scala库肯定是针对Java小于1.7的版本编译的。我建议用Java1.6编译你的scala代码。您仍然可以在Java 1.7中编译Java代码,并在scala代码中使用它,此外,针对Java 1.6编译的代码可以在JVM 1.7上运行。

更新:有人遇到了同样的问题:http://comments.gmane.org/gmane.comp.lang.scala.debate/9158

票数 1
EN

Stack Overflow用户

发布于 2015-11-16 08:13:22

我已经写了一个小型库SwingPlus,它使得在Java6和Java 7+上编译时都可以使用ListView。问题(正如其他人所指出的)是Swing在Java7中的泛化。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13253679

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档