关闭

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

标签: scalajavaclass反编译
16人阅读 评论(0) 收藏 举报
分类:

众所周知,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)
0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

类/属性/对象/方法的区别

类/属性/对象/方法的区别    在面向对象里面,对象和类是不同的,对象是特定类的一个实例,比如如果车是一个类的话,某个人的一辆奔驰车就是一个对象,它是车这个类的实例。类是抽象的,而对象是具体的。方...
  • somanygenius
  • somanygenius
  • 2015-08-24 15:59
  • 3215

深入理解Java中的字段与属性的区别

1、Java中的属性和字段有什么区别?  答:Java中的属性(property),通常可以理解为get和set方法。 而字段(field),通常叫做“类成员”,或 "类成员变量”,有时也叫“域”,理...
  • chenchunlin526
  • chenchunlin526
  • 2017-05-08 16:45
  • 5285

Python中字段(属性)、方法、特性的区别

Python中字段、方法、特性的区别:
  • u014745194
  • u014745194
  • 2017-04-13 19:50
  • 1491

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

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

将C# 类文件中属性和方法自动生成文档,C#类文档结构化生成

  • 2017-12-08 16:40
  • 416KB
  • 下载

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

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

js 区别(类、成员、属性、对象、方法)

JavaScript Array 对象 Array 对象 Array 对象用于在单个的变量中存储多个值。 创建 Array 对象的语法: new Array(); new Arra...
  • boss2967
  • boss2967
  • 2017-11-16 15:08
  • 67

JavaScript 中 私有/公有属性 私有/公有方法 类/实例方法 的区别

首先声明的是:JavaScript
  • FJ2010080080026
  • FJ2010080080026
  • 2014-08-09 16:18
  • 382

7.Scala类的属性和对象私有字段实战详解

一、Scala类的使用实战 class Person{ private var age = 0 def increment() {age += 1} def current() = {ag...
  • KongMingJue
  • KongMingJue
  • 2017-04-14 17:07
  • 246

关于Scala子类继承父类属性的问题释疑---子类构造器参数不要与父类属性同名

今天和朋友聊到scala继承的时候,发现有一些问题,我
  • zl3450341
  • zl3450341
  • 2014-06-16 19:21
  • 3071
    个人资料
    • 访问:23916次
    • 积分:1205
    • 等级:
    • 排名:千里之外
    • 原创:103篇
    • 转载:1篇
    • 译文:0篇
    • 评论:3条
    个人介绍
    文章分类
    最新评论