这里的问题是:我的jar包含已编译的scala代码。我在罐子里看到
Step.class 步骤$ class.class
这两个都是合法的java类。
然而,当我尝试在Intellij Idea java项目中使用Step $ class时,它说:“无法解析符号Step $ class”。但代码是用maven编译的,所以我认为问题出在IDE中。
答案 0 :(得分:1)
与Java接口不同,Scala traits可以包含实现。 scalac
将其编译为接口和实现类:
~/code/scratch/20120505 cat trait.scala
package test
trait T {
def a = println("foo")
}
~/code/scratch/20120505 scalac210 -d . trait.scala
~/code/scratch/20120505 javap -classpath . test/T
Compiled from "trait.scala"
public interface test.T extends scala.ScalaObject{
public abstract void a();
}
~/code/scratch/20120505 javap -classpath . test/T\$class
Compiled from "trait.scala"
public abstract class test.T$class extends java.lang.Object{
public static void a(test.T);
public static void $init$(test.T);
}
IntelliJ Scala插件不会将实现类公开给Java代码。直接使用它并不是一个好主意,因为您依赖于Scala编译器的实现细节。
您应该在特征的子类上调用相应的方法。但是,您必须在Scala中编写它。
答案 1 :(得分:0)
Ups,愚蠢的我,我刚刚使所有缓存无效并重新导入了jar,现在它得到了解决。