加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala(包)对象被反编译为java – 包含“new();”的静态初始化器

发布时间:2020-12-16 10:00:31 所属栏目:安全 来源:网络整理
导读:我有以下 scala代码 package x.ypackage object config { type SomeType = AnotherType[YetAnotherOne]} 以下是JDGUI在Java中的用法 package x.y.config;import scala.reflect.ScalaSignature;@ScalaSignature(bytes="0601...")public final class packa
我有以下 scala代码

package x.y

package object config {

  type SomeType = AnotherType[YetAnotherOne]
}

以下是JDGUI在Java中的用法

package x.y.config;

import scala.reflect.ScalaSignature;

@ScalaSignature(bytes="0601...")
public final class package {}

和…

package x.y.config;

public final class package$
{
  public static final  MODULE$;

  static
  {
    new ();
  }

  private package$()
  {
    MODULE$= this;
  }
}

我对类型定义的消失没有任何问题(我希望scalac能够消除它)

我确实想知道以下是什么:

static
{
  new ();
}

MODULE $得到解释here.

事实上,当我将Java代码剪切并粘贴到我的IDE中时,它无法编译.无类型公共静态最终MODULE $;也不是新的();做.

这只是一些反编译的错位吗?我错过了什么吗?

这里发生了什么?

编辑:

按要求:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读