Java 16 新特性:record類

語言: CN / TW / HK

以前我們定義類都是用class關鍵詞,但從Java 16開始,我們將多一個關鍵詞record,它也可以用來定義類。record關鍵詞的引入,主要是為了提供一種更為簡潔、緊湊的final類的定義方式。

下面就來具體瞭解record類的細節。配套影片教程:Java 16 新特性:使用record宣告類

宣告record類

宣告record類的基礎語法:

java record range(int start, int end){}

我們知道class類可以在單獨檔案中生命,也可以在其他類中申明。那麼record類也一樣,它有這幾種申明方式:

  1. 單獨檔案申明:

java public record range(int start, int end){}

  1. 在類內部申明:

java public class DidispaceTest { public record range(int start, int end){} }

  1. 函式內申明:

java public class DidispaceTest { public void test() { public record range(int start, int end){} } }

record類詳解

在知道了如何申明之後,你一定會想用record申明的就那麼點元素,它到底會具備什麼能力呢?

因為record關鍵詞申明類主要是為了簡化一些類的申明,所以它本質就是一類特殊的class,或者說是某一個模版的class。

record申明的類,具備這些特點:

  1. 它是一個final
  2. 自動實現equalshashCodetoString函式
  3. 成員變數均為public屬性

所以,對於之前寫的range類,它等價於一個這樣的類:

```java public final class range{ final int start; final int end;

public range(int start, int end) {
    this.start = start;
    this.end = end;
}

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    range range = (range) o;
    return start == range.start && end == range.end;
}

@Override
public int hashCode() {
    return Objects.hash(start, end);
}

@Override
public String toString() {
    return "range{" +
            "start=" + x +
            ", end=" + y +
            '}';
}

public int start(){
    return start;
}

public int end(){
    return end;
}

} ```

因為一些函式是隱藏的,在range定義的時候,我們看不到,所以我們可以嘗試寫這樣一段測試程式碼來驗證一下:

```java @Test public void test() { range r = new range(100, 200); log.info(r.toString());

range r2 = new range(100, 200); log.info(String.valueOf(r.equals(r2))); } ```

定義成員函式

因為record申明的本質也是類,那麼定義成員函式肯定也是可以的。

比如,我們可以這樣在record類中定義成員函式:

java record range(int start, int end){ int distance(){ return end - start; } }

然後,就可以這樣呼叫它:

java range r = new range(100, 200); r.distance();

如果您學習過程中如遇困難?可以加入我們超高質量的技術交流群,參與交流與討論,更好的學習與進步!另外,不要走開,關注我,持續更新Java新特性專欄

歡迎關注我的公眾號:程式猿DD。第一時間瞭解前沿行業訊息、分享深度技術乾貨、獲取優質學習資源