Scala 类中属性和属性生成的方法的区别

众所周知,Scala 是运行于Java平台(Java虚拟机)的,那么Scala程序编译之后会生成对应的字节码文件,我们将字节码文件反编译成Java文件即可知Scala 为我们都做了什么.

  1. 首先我们有一个Scala 源文件

    //Scala源代码
    class Test3 {
      val a = "a"
      var b = "b"
    
      private val c = "c"
      private var d = "d"
    
      private[this] val e = "e"
      private[this] var f = "f"
    
      @BeanProperty var g = "g"
      @BeanProperty val h = "h"
    }
  2. 那么接下来我们看看这些属性在反编译成JAVA源代码Scala都帮我们做了什么

    //反编译后的代码
    public class Test3
    {
      private final String a = "a";
      private String b = "b";
    
      private final String c = "c";
      private String d = "d";
    
      private final String e = "e";
      private String f = "f";
    
      @BeanProperty
      private String g = "g";
    
      @BeanProperty
      private final String h = "h";
    
      public String a() { return this.a; } 
      public String b() { return this.b; } 
      public void b_$eq(String x$1) { this.b = x$1; } 
    
      private String c() { return this.c; } 
      private String d() { return this.d; } 
      private void d_$eq(String x$1) { this.d = x$1; }
    
      public String g() {return this.g; } 
      public void g_$eq(String x$1) { this.g = x$1; } 
      public String h() { return this.h; }
      public String getG(){return g(); } 
      public String getH() { return h(); }
      public void setG(String x$1){g_$eq(x$1);}
    }

    总结下:

    Scala字段生成的方法
    val/var name公共的name name_ 方法(仅限于var)
    prviate val/var name私有的name name_ 方法(仅限于var)
    prviate[this] val/var name
    @BeanProperty val/var name公共的name getName() name_ setName(…)(仅限于var)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值