Scala 类的主构造方法中属性修饰符的作用与区别

标签: scala java class
55人阅读 评论(0) 收藏 举报
分类:

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

  1. Scala 源代码

    
    class Test4(a: String)
    
    class Test5(val b: String, var c: String)
    
    class Test6(private val d: String, private var e: String)
    
    class Test7(private[this] val f: String, private[this] var g: String)
    
    class Test8(@BeanProperty val f: String, @BeanProperty var g: String)
    
    //貌似这种写法没有什么用
    class Test9(@BeanProperty private[this] val f: String, @BeanProperty private[this] var g: String)
  2. 反编译后的Java代码

    public class Test4
    {
      public Test4(String a)
      {
      }
    }
    
    public class Test5
    {
      private final String b;
      private String c;
    
      public String b(){return this.b; } 
      public String c() { return this.c; } 
      public void c_$eq(String x$1) { this.c = x$1; }
    
    
      public Test5(String b, String c)
      {
      }
    }
    
    public class Test6
    {
      private final String d;
      private String e;
    
      private String d(){return this.d; } 
      private String e() { return this.e; } 
      private void e_$eq(String x$1) { this.e = x$1; }
    
    
      public Test6(String d, String e)
      {
      }
    }
    
    public class Test7
    {
      public Test7(String f, String g)
      {
      }
    }
    
    public class Test8
    {
      private final String f;
      private String g;
    
      public String f(){return this.f; } 
      public String g() { return this.g; } 
      public void g_$eq(String x$1) { this.g = x$1; } 
      public String getF() { return f(); } 
      public String getG() { return g(); } 
      public void setG(String x$1) { g_$eq(x$1); }
    
    
      public Test8(@BeanProperty String f, @BeanProperty String g)
      {
      }
    }
    
    public class Test9
    {
      public Test9(@BeanProperty String f, @BeanProperty String g)
      {
      }
    }

    总结

主构造器参数 生成的字段 生成的方法
name:String 不生成任何字段 不生成任何方法
val/var name:String 私有字段 公共的getter/setter方法
private val/var name:String 私有字段 私有的getter/setter方法
private[this] val/var name:String 不生成任何字段 不生成任何方法
@BeanProperty val/var name:String 私有字段 公共的Scala版和JavaBean版的 getter/setter方法
@BeanProperty private[this] val/var name:String 不生成任何字段 不生成任何方法
查看评论

Scala之主构造函数

主构造函数首先,我们必须要非常清晰明确的认识到:主构造函数不是你看到class后面跟的参数列表,那怎么可能是主构造函数呢?那只是主构造函数的函数列表!那主构造函数的函数体在那里呢?答案是:class ...
  • bluishglc
  • bluishglc
  • 2016-03-15 19:10:19
  • 13538

Scala类的构造器与访问器

1.构造器 在Scala中,每个类都有一个主构造器。主构造器与类的定义交织在一起,如下: class Person ( private var _name: String, priv...
  • u010376788
  • u010376788
  • 2015-12-16 19:59:17
  • 1593

scala 构造方法(默认构造器)

与类名放在一起的(方法)是默认构造器 class SparkContext(config: SparkConf) extends Logging with ExecutorAllocationC...
  • gdmzlhj1
  • gdmzlhj1
  • 2016-03-01 13:45:25
  • 591

Java 语言的类、属性、方法各有哪些修饰符?简述各修饰符的区别

1、 类的修饰符分为:可访问控制符和非访问控制符两种。 可访问控制符是:公共类修饰符 public 非访问控制符有:抽象类修饰符 abstract ;最终类修饰符 final    ...
  • wowfly98
  • wowfly98
  • 2016-08-12 17:35:52
  • 3477

scala 类定义构造函数与继承

1.scala中如何定义类scala中定义类的方式很简单class Point(xc:Int,yc:Int)上面这行代码就定义了一个类 1.首先是关键字class 2.其后是类名 Point 3...
  • bitcarmanlee
  • bitcarmanlee
  • 2016-11-09 23:52:04
  • 4031

Scala访问控制修饰符

参考自《Programming in Scala》一、访问控制修饰符包的成员,类或对象可以使用访问控制修饰符,比如 private 和 protected 来修饰,通过这些修饰符可以控制其他部分对这些...
  • u011026329
  • u011026329
  • 2016-01-20 17:57:24
  • 1739

java 构造函数默认修饰符

java 构造器权限分析
  • qq_35530042
  • qq_35530042
  • 2017-09-17 14:16:35
  • 193

Java:构造函数的访问修饰符

构造方法可以处于public、protected、private和默认四种访问级别之一。 public public这里就不多说了 private 当构造方法为private级别时,意味着只能...
  • wangyanguiyiyang
  • wangyanguiyiyang
  • 2015-11-17 10:31:46
  • 3039

CSharp学习笔记之十 类的修饰符

前面对C#中的类有了一定的解释,但是关于类的很多的东西前面并没有介绍的很清楚,其实C#并不是像我们想象的那样简单,我们要想将C#学的更深一步还是需要多花点时间来进行学习的。努力才会又收获的么。好的来下...
  • caosiyuan1991
  • caosiyuan1991
  • 2013-12-27 11:17:25
  • 1687

权限修饰符的作用和区别

程序源码中,声明在不同地方的变量具有不同的作用域,例如:局部变量、全局变量等。在Java语言中,作用域是由花括号“{...}”的位置决定的,它决定了其定义的变量名的可见性与生命周期。 在Java...
  • u010698072
  • u010698072
  • 2016-08-16 21:23:43
  • 1187
    个人资料
    持之以恒
    等级:
    访问量: 3万+
    积分: 1437
    排名: 3万+
    个人介绍
    最新评论