Java Intellij idea无法解析包含美元的类
这里的问题是:我有一个包含编译过的scala代码的jar。在罐子里我看到了 阶梯类 步骤$class.class 它们都是合法的java类Java Intellij idea无法解析包含美元的类,java,scala,intellij-idea,scala-java-interop,Java,Scala,Intellij Idea,Scala Java Interop,这里的问题是:我有一个包含编译过的scala代码的jar。在罐子里我看到了 阶梯类 步骤$class.class 它们都是合法的java类 然而,当我尝试在Intellij Idea java项目中使用步骤$class时,它会说:“无法解析符号步骤$class”。但代码是用maven编译的,所以我认为问题出在IDE中。Ups,愚蠢的我,我刚刚使所有缓存无效并重新导入JAR,现在它得到了解决。Scala特性可以包含实现,而不像Java接口scalac将其编译为接口和实现类: ~/code/sc
然而,当我尝试在Intellij Idea java项目中使用步骤$class时,它会说:“无法解析符号步骤$class”。但代码是用maven编译的,所以我认为问题出在IDE中。Ups,愚蠢的我,我刚刚使所有缓存无效并重新导入JAR,现在它得到了解决。Scala特性可以包含实现,而不像Java接口
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编译器的实现细节
您应该在trait的子类上调用相应的方法。不过,你必须用Scala来写
更多信息:是的。顺便说一句,我使用11.0 intellij-idea。在这种情况下,如果你怀疑它是一个bug,我会尝试11.1.1。对于11.1.1,它只是忽略了所有$containig类。我会将它作为一个bug记录到Jetbrains上,即使你使用的是免费版本,它们通常也会相当响应。