Java Intellij idea无法解析包含美元的类

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

这里的问题是:我有一个包含编译过的scala代码的jar。在罐子里我看到了

阶梯类 步骤$class.class

它们都是合法的java类


然而,当我尝试在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上,即使你使用的是免费版本,它们通常也会相当响应。