這裏的問題:我有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