gpt4 book ai didi

java - scala(包)对象反编译为 java - 包含 "new ();"的静态初始值设定项 - 那是什么?

转载 作者:搜寻专家 更新时间:2023-11-01 03:00:51 25 4
gpt4 key购买 nike

我有以下scala代码

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 消除它)

我很想知 Prop 体是什么:

static
{
new ();
}

MODULE$ 得到解释 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$;
}

最佳答案

我不是 scala 专家,但对我来说这似乎很正常,因为“对象”定义了一个单例对象。参见 http://docs.scala-lang.org/tutorials/tour/singleton-objects.html

关于java - scala(包)对象反编译为 java - 包含 "new ();"的静态初始值设定项 - 那是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34906198/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com