스칼라의 주 생성자 정보

초기 스칼라 연구에서는 일반적으로 다음 코드와 같이 변수를 추가 할 때 Java 스타일 멤버 정의 방법을 사용했습니다.

class Student{
    
    
  var name : String = _
}

Scala는 기본 생성자와 Scala 스타일의 SetXXX (public java.lang.String name ()) 및 GetXXX (public name_ (java.lang.String))을 생성합니다. 실제로 Scala는 멤버 변수와 생성자를 정의하는보다 단순화 된 방법을 제공합니다. 즉, 멤버 변수와 생성자를 서로 엮는 것입니다. 예를 들면 다음과 같습니다.

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

이 코드를 디 컴파일하면 다음을 얻을 수 있습니다.

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);

Person (var name : String, var age : Int)
클래스 는 다음 세 가지 작업을 수행하는 것을 볼 수 있습니다. 1. 클래스를 정의하고 생성자 Person (var name : String, var age : Int)을 구현합니다.
2. 이름 및 연령 멤버 변수가 정의됩니다.
3. 스칼라 스타일의 Setxxx () 및 Getxxx () 메서드가 각각 생성됩니다.

Java 언어를 사용하여 Person (var name : String, var age : Int) 클래스와 동일한 기능을 수행하는 경우 다음 코드가 필요합니다.

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;
    }
}

scala는 Java에서 여러 줄의 코드 기능을 수행하기 위해 한 줄의 코드 만 사용한다는 것을 알 수 있습니다.
Java 언어에서 객체를 생성 할 때 특정 작업을 수행하려면 생성자에 해당 코드를 추가해야하지만 스칼라에서는 정의 된 클래스에 코드를 직접 삽입하기 만하면됩니다. 예를 들면 다음과 같습니다.

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
}

위의 코드에서 println 문은 Person 클래스 본문에 배치되며, 해당 문은 주 생성자의 일부로 사용되어 객체 생성시 실행되며 다음 자바 코드와 동일합니다.

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;
    }
}

참고 :
**

  1. Scala 생성자의 기능은 새 객체의 초기화를 완료하는 것이며 생성자에는 반환 값이 없습니다.
  2. 주 생성자의 선언은 클래스 이름 바로 뒤에 배치됩니다.
  3. 주 생성자는 클래스 정의의 모든 문을 실행합니다 (클래스에 작성된 문을 주 생성자에 넣습니다). 여기에서 Scala의 함수 프로그래밍과 객체 지향 프로그래밍의 통합을 경험할 수 있습니다. 즉, 생성자는 메소드 (함수), 매개 변수 전달 및 메소드 사용은 이전 함수 부분과 다르지 않습니다. **

추천

출처blog.csdn.net/weixin_44080445/article/details/108785651