2012-04-18 74 views
4

使用Eclipse IDE時,我無法從Java代碼中引用Scala類。有問題的Scala類嵌套在Scala對象結構中。當試圖在Java代碼中使用該類時,Eclipse會抱怨使用該二進制名稱。Eclipse中的Scala對象嵌套類Java

下面是Scala代碼定義的類利息(Inner)的例子:

package mypackage; 

object Outer { 
    object Middle { 
    class Inner { 
     def msg() { 
     println("Running"); 
     } 
    } 
    } 
} 

使用類Inner在Java代碼中,我使用下面的代碼:

mypackage.Outer$Middle$Inner inner = new mypackage.Outer$Middle$Inner(); 
inner.msg(); 

然而,Eclipse(Indigo)編譯器會在第一行發出以下消息:

嵌套類型mypackage.Outer $ Middle $ Inner無法使用其二進制名稱引用

有趣的是,上面的Java代碼在與NetBeans 6.9.1一起使用時可以工作。

這是Eclipse編譯器的問題嗎?是否有任何標誌允許使用二進制名稱?或者,或者,這是Scala的問題還是我使用它的方式?

回答

1

無法從Java訪問深度嵌套的對象。無論是從Eclipse,命令行還是任何構建工具。字節碼轉換會丟失嵌套信息。

Eclipse不允許你使用$名字,所以它會抱怨。如果你關心Java互操作,你應該在邊界上堅持類似Java的Scala。頂級類,純特徵或抽象類,沒有更高級的方法等。

+0

因此,Netbeans成功運行代碼只是一個幸運的例外而已? – 2012-04-21 19:13:19

+0

如果確實如此,我會很驚訝。 Netbeans中的語法是什麼? – 2012-05-03 08:10:49

+0

問題中所描述的語法正確。我構建了一個Scala jar並在NetBeans Java項目中使用它。我已經爲GitHub添加了一個可執行的示例:http://github.com/andriusvelykis/scala-nested-class-netbeans – 2012-05-08 11:39:49