2012-05-05 24 views
0

這裏的問題:我有jar包含編譯的scala代碼。在罐子我看到Intellij的想法不能解決包含類的美元

Step.class 步驟$ class.class

這都是合法的Java類。

但是,當我嘗試在Intellij Idea java項目中使用Step $ class時,它說:「無法解析符號Step $ class」。但是代碼是用maven編譯的,所以我認爲問題在IDE中。

+0

是的。順便說一句,我使用11.0 intellij-idea。 – Vladimir

+0

在這種情況下,我會嘗試11.1.1,如果你懷疑它的錯誤。 –

+0

與11.1.1相同,它只是忽略所有$ containsig類。 – Vladimir

回答

0

Ups,傻我,我只是無效所有的緩存和重新導入罐子,現在它得到解決。

1

與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中編寫它。

更多信息:How are Scala traits compiled into Java bytecode?

相關問題