在Netbeans中,我使用了一些别人写的scala代码(jar),并将其与scala-library.jar一起包含在一个java项目中。它运行得很好,没有出现任何问题。
现在,当我尝试使用eclipse进行同样的操作时,我会得到以下构建错误
Internal compiler error: java.lang.ClassCastException:
org.eclipse.jdt.internal.compiler.lookup.BaseTypeBinding cannot be cast to
org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding at
org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.initializeTypeVariable(BinaryTypeBinding.java:944) DemoApp.java /demo/ line 0 Java Problem
在谷歌上,我发现其他人也有这个问题,但没有看到任何修复。
如果你们中的任何人看到了这个错误并找到了解决方法,请在这里分享。如果需要其他信息,请告诉我。不幸的是,我没有我使用的Scala代码的来源,只有jar。如果你需要DemoApp.java的代码,我可以把它粘贴在这里,但这不是很有用:它只是引用Scala代码中的一个对象。
详细信息:scala-2.8.r22602-b20100720020114
谢谢。
Scala的一个问题是不同版本之间缺乏二进制兼容性。要么使用与编译原始Jar相同的库版本,要么重新编译Jar(如果可以的话)。
您启用了JDT编织吗?前往首选项->JDT编织了解详情。如果它被禁用,那么您的IDE中可能会出现无法解释的错误。
好的。我终于找到了解决方案!
感谢这个SO问题
问题似乎出在Scala 2.8编译器上(显然)。2.9中没有这个问题。其中一个修复建议是使用Scala2.9,但这并不总是可能的。所以这是正确的解决方案。
问题在于Scala的List
类型。我发现我在Scala代码中的某个地方返回(暴露)了一个List
,这导致了Eclpise中Java的问题。
若要解决此问题,请不要返回List
。返回Array
或某些Java类型。