这里的问题:我有jar包含编译的scala代码。在罐子我看到Intellij的想法不能解决包含类的美元
Step.class 步骤$ class.class
这都是合法的Java类。
但是,当我尝试在Intellij Idea java项目中使用Step $ class时,它说:“无法解析符号Step $ class”。但是代码是用maven编译的,所以我认为问题在IDE中。
这里的问题:我有jar包含编译的scala代码。在罐子我看到Intellij的想法不能解决包含类的美元
Step.class 步骤$ class.class
这都是合法的Java类。
但是,当我尝试在Intellij Idea java项目中使用Step $ class时,它说:“无法解析符号Step $ class”。但是代码是用maven编译的,所以我认为问题在IDE中。
Ups,傻我,我只是无效所有的缓存和重新导入罐子,现在它得到解决。
与Java接口不同,Scala特征可以包含实现。 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插件不暴露实现类的Java代码。直接使用它并不是一个好主意,因为您依赖于Scala编译器的实现细节。
您应该调用特征子类上的相应方法。不过,您必须在Scala中编写它。
是的。顺便说一句,我使用11.0 intellij-idea。 – Vladimir
在这种情况下,我会尝试11.1.1,如果你怀疑它的错误。 –
与11.1.1相同,它只是忽略所有$ containsig类。 – Vladimir