我有以下的Scala代碼將scala(包)對象反編譯爲java - 包含「new();」的靜態初始化程序- 那是什麼?
package x.y
package object config {
type SomeType = AnotherType[YetAnotherOne]
}
以下是JDGUI使得它有什麼用Java
package x.y.config;
import scala.reflect.ScalaSignature;
@ScalaSignature(bytes="\006\001...")
public final class package {}
而且......
package x.y.config;
public final class package$
{
public static final MODULE$;
static
{
new();
}
private package$()
{
MODULE$ = this;
}
}
我有消失沒有問題的type
的定義(我期望scalac可以消除它)
我也想知道下面具體是什麼:
static
{
new();
}
模塊$得到解釋here。
問題是,當我將Java代碼剪切並粘貼到我的IDE中時,它無法編譯。非打字public static final MODULE$;
和new();
都沒有。
它只是一些反編譯錯位?我錯過了什麼嗎?
這是怎麼回事?
編輯:
爲每個請求:
javap -c -l -private package\$.class
Compiled from "package.scala"
public final class x.y.config.package$ {
public static final x.y.config.package$ MODULE$;
public static {};
Code:
0: new #2 // class x/y/config/package$
3: invokespecial #12 // Method "<init>":()V
6: return
private x.y.config.package$();
Code:
0: aload_0
1: invokespecial #13 // Method java/lang/Object."<init>":()V
4: aload_0
5: putstatic #15 // Field MODULE$:Lx/y/config/package$;
8: return
LineNumberTable:
line 9: 0
LocalVariableTable:
Start Length Slot Name Signature
0 9 0 this Lx/y/config/package$;
}
這可能是有趣的,看看有什麼'的javap -c -l -private'說,有關的類 –
類初始化創建一個實例,並構造安裝新的實例作爲辛格爾頓MODULE $字段。 –
這似乎是一個鍋爐板代碼初始化單,但我對此事一無所知斯卡拉 –