Sobre el constructor principal en scala

En el primer estudio de Scala, generalmente usamos el método de definición de miembros de estilo Java al agregar variables, como el siguiente código.

class Student{
    
    
  var name : String = _
}

Scala generará un constructor predeterminado y SetXXX al estilo Scala (public java.lang.String name ()) y GetXXX (public name_ (java.lang.String)). De hecho, Scala proporciona una forma más simplificada de definir constructores y variables miembro, es decir, entrelazar constructores y variables miembro, por ejemplo:

object demo03 {
    
    
  def main(args: Array[String]): Unit = {
    
    
  }
}
class Person(var name : String,var age : Int){
    
    
}

Al descompilar este código, obtenemos:

E:\WorkSpace\scalaFiles\target\classes\com\mo\chapter06\myconstructor>javap -private Person.class
Compiled from "demo03.scala"
public class com.mo.chapter06.myconstructor.Person {
    
    
  private java.lang.String name;
  private int age;
  public java.lang.String name();
  public void name_$eq(java.lang.String);
  public int age();
  public void age_$eq(int);
  public com.mo.chapter06.myconstructor.Person(java.lang.String, int);

Puede ver que la clase Person (var name: String, var age: Int) hace tres cosas:
1. Define una clase e implementa el constructor Person (var name: String, var age: Int).
2. Se definen las variables de miembro de nombre y edad.
3. Los métodos Setxxx () y Getxxx () en estilo scala se generan respectivamente.

Si usa el lenguaje java para lograr la misma función que la clase Person (var name: String, var age: Int), necesita el siguiente código.

public class demo04 {
    
    
    String name ;
    int age ;
    public void setName(String name){
    
    
        this.name = name;
    }
    public String getName(){
    
    
        return name;
    }
    public void setAge(int age){
    
    
        this.age = age;
    }
    public int getAge(){
    
    
        return age;
    }
    public demo04(String name,int age){
    
    
        this.name = name;
        this.age = age;
    }
}

Se puede ver que scala solo usa una línea de código para lograr la función de múltiples líneas de código en java.
En el lenguaje Java, si desea realizar ciertas acciones al crear un objeto, debe agregar el código correspondiente en el constructor, pero en scala, solo necesita poner el código directamente en la clase definida, por ejemplo:

object demo03 {
    
    
  def main(args: Array[String]): Unit = {
    
    
    val person = new Person("tom",18)
    //this is a part of constructor~~~
  }
}
class Person(val name :String , val age : Int){
    
    
  println("this is a part of constructor~~~")
  //println语句作为主构造器的一部分,在创建对象时被执行。
  override def toString: String = name + " " + age
}

Tenga en cuenta que en el código anterior, se coloca una declaración println en el cuerpo de la clase Person, y la declaración se utilizará como parte del constructor principal y se ejecutará cuando se cree el objeto. Es equivalente al siguiente código Java.

public class demo04 {
    
    
    public static void main(String[] args) {
    
    
        new demo04("tom" , 18);
    }
    String name ;
    int age ;
    public void setName(String name){
    
    
        this.name = name;
    }
    public String getName(){
    
    
        return name;
    }
    public void setAge(int age){
    
    
        this.age = age;
    }
    public int getAge(){
    
    
        return age;
    }
    public demo04(String name,int age){
    
    
        System.out.println("this is a part of constructor~~~");
        this.name = name;
        this.age = age;
    }
}

Nota:
**

  1. La función del constructor de Scala es completar la inicialización del nuevo objeto y el constructor no tiene valor de retorno.
  2. La declaración del constructor principal se coloca directamente después del nombre de la clase.
  3. El constructor principal ejecutará todas las declaraciones en la definición de la clase (coloque las declaraciones escritas en la clase en el constructor principal). Aquí puede experimentar la integración de la programación funcional de Scala y la programación orientada a objetos, es decir: el constructor también es un método (Función), el paso de parámetros y el uso de métodos no son diferentes de la parte de función anterior. **

Supongo que te gusta

Origin blog.csdn.net/weixin_44080445/article/details/108785651
Recomendado
Clasificación