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

需要帮助来解释scala问题

发布时间:2020-12-16 18:23:36 所属栏目:安全 来源:网络整理
导读:我有两个 scala类(当我使用 javap -private读取类文件时,它们的 Java代码). 当我在toString方法中使用n和d时,它将在类中生成私有成员字段.这是为什么?我有点困惑. Scala#1: class Rational(n: Int,d: Int) {} 相当于javap: public class com.zjffdu.tutor
我有两个 scala类(当我使用 javap -private读取类文件时,它们的 Java代码).

当我在toString方法中使用n和d时,它将在类中生成私有成员字段.这是为什么?我有点困惑.

Scala#1:

class Rational(n: Int,d: Int) {

}

相当于javap:

public class com.zjffdu.tutorial.scala.Rational
extends java.lang.Object
implements scala.ScalaObject{
    public com.zjffdu.tutorial.scala.Rational(int,int);
}

Scala#2:

class Rational(n: Int,d: Int) {
  override def toString() = n + "/" + d
}

相当于javap:

public class com.zjffdu.tutorial.scala.Rational
extends java.lang.Object
implements scala.ScalaObject{
    private final int n;
    private final int d;
    public java.lang.String toString();
    public com.zjffdu.tutorial.scala.Rational(int,int);
}

解决方法

那么,n和d的值需要以某种方式从toString体内获得,对吗?否则你无法使用它们.当你构造一个新实例和n和d碰巧在堆栈上,并且当你调用toString,并且n和p早已从堆栈中消失时,可能会发生任何事情.因此编译器会自动将值保存在字段中 – 即使您未在代码中将它们声明为(私有)val.编译器将对在类的构造函数之外使用的所有构造函数变量执行此操作(请记住,类的构造函数实际上是类本身的整个主体,不包括val和def定义).

(编辑:李大同)

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

    推荐文章
      热点阅读