zoukankan      html  css  js  c++  java
  • 关于scala的简单理解,对象,属性

    对于scala 的理解。首先从代码方面来理解,首先看下面的代码:

    scala:

    import scala.beans.BeanProperty

    object Demo2 {
    class Person{
    println("shanghai is a good place")
    @BeanProperty var sex: String=_
    }

    def main(args: Array[String]): Unit = {
    val sex = new Person()
    sex.setSex("male")
    print(sex.getSex)
    }
    }
    运行完成之后的结果为:

    shanghai is a good place
    male

    然后通过反编译工具对这段代码进行反编译生成的java代码如下:

    import scala.Predef.;
    import scala.reflect.ScalaSignature;

    public final class Demo2
    {
    public static void main(String[] paramArrayOfString)
    {
    Demo2..MODULE$.main(paramArrayOfString);
    }

    public static class Person
    {
    private String sex;

    public String sex()
    {
    return this.sex; }
    public void sex_$eq(String x$1) { this.sex = x$1; }
    public String getSex() { return sex(); }
    public void setSex(String x$1) { sex_$eq(x$1); }


    public Person()
    {
    Predef..MODULE$.println("shanghai is a good place");
    }
    }
    }

    从上面的反编译的结果可以有如下的总结:

    (1)在scala中,每个类都有主要的构造器,这个构造器和类交织在一起,他的参数直接成了类的字段。主构造器执行类体中的所有语句。

    除了主构造器之外,我们还有辅构造器,这个辅助构造器使用this,这一点和java当中的构造器不同。java的构造器必须和类名相同。这个就比较灵活。

    反编译后的类变成了静态的类。而且是public的静态类。

    (2)然后在类当中定义了一个变量sex,这个变量在scala当中作为私有的成员变量。(详见反编译后的代码),因为是在这个私有的成员中加上了

    @BeanProperty,这个时候就想java中的javabean一样。可以正常的使用get set方法,对变量进行赋值和取值。(反编译后的代码转化成为javabean的形式,但是还是有点不同)

    (3) 在主构造器中的语句都会执行。我们定义的输出。在反编译后可以看到,他会放在构造方法中去执行。

    总结:对于scala的语法。紧凑严谨
  • 相关阅读:
    调试cuda程序一定要细心啊 不然一个bug会折腾你2天
    XML和实体类之间相互转换(序列化和反序列化)
    C#实现实体类和XML相互转换
    C#压缩打包文件例子
    通过锁字符串达到控制并发的效果C#
    巧用Ajax的beforeSend 提高用户体验
    HTML代码在线运行工具
    .NET使用ZXing.NET生成中间带图片和不带图片的二维码
    获取电脑硬件信息 (硬盘,cpu,内存等)
    C# http请求带请求头部分
  • 原文地址:https://www.cnblogs.com/gxgd/p/8819769.html
Copyright © 2011-2022 走看看