我们始终是路人

I'll try anything once.学习笔记

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)
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a1837634447/article/details/79049881
个人分类: scala
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭