0Pricing
Java Academy · Pelajaran

Sealed dengan Record

Modelkan hierarki tertutup.

Sealed dengan Record adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Java Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Java Academy mencakup 4 pelajaran total.

Tipe Tersegel dan Record

Antarmuka tersegel dan record merupakan pasangan yang sempurna. Antarmuka tersegel mendefinisikan himpunan kasus tertutup; setiap record merupakan satu kasus konkret yang tidak dapat diubah. Bersama-sama, keduanya memodelkan tipe data aljabar.

Record Secara Implisit Tidak Dapat Diperluas Lagi

Record secara otomatis bersifat final, sehingga memenuhi aturan bahwa subtipe yang diizinkan harus berupa final, sealed, atau non-sealed. Tidak diperlukan modifier tambahan.

Hierarki Bentuk Tertutup

Modelkan bentuk sebagai record yang mengimplementasikan antarmuka tersegel, dengan setiap record membawa datanya sendiri.

public class Main {
    sealed interface Shape permits Circle, Rectangle {}
    record Circle(double radius) implements Shape {}
    record Rectangle(double width, double height) implements Shape {}

    public static void main(String[] args) {
        Shape s = new Rectangle(3, 4);
        System.out.println(s);
    }
}

Menambahkan Perilaku

Antarmuka tersegel dapat mendeklarasikan metode yang diimplementasikan oleh setiap record, sehingga memungkinkan polimorfisme atas himpunan tertutup tersebut.

public class Main {
    sealed interface Shape permits Circle, Rectangle {
        double area();
    }
    record Circle(double radius) implements Shape {
        public double area() { return Math.PI * radius * radius; }
    }
    record Rectangle(double width, double height) implements Shape {
        public double area() { return width * height; }
    }

    public static void main(String[] args) {
        Shape s = new Circle(2);
        System.out.printf("Area: %.2f%n", s.area());
    }
}

Kesetaraan dan toString Otomatis

Record secara otomatis menghasilkan equals, hashCode, dan toString. Dua record dengan komponen yang sama dianggap setara, sehingga sangat cocok untuk pemodelan nilai.

public class Main {
    sealed interface Shape permits Circle {}
    record Circle(double radius) implements Shape {}

    public static void main(String[] args) {
        Circle a = new Circle(5);
        Circle b = new Circle(5);
        System.out.println(a.equals(b));
        System.out.println(a);
    }
}

Memodelkan Result

Pola yang umum adalah tipe Result tersegel dengan record keberhasilan dan record kegagalan, yang menggantikan nilai balik yang dapat kosong atau pengecualian untuk hasil yang memang diharapkan.

public class Main {
    sealed interface Result permits Ok, Err {}
    record Ok(int value) implements Result {}
    record Err(String message) implements Result {}

    static Result parse(String s) {
        try { return new Ok(Integer.parseInt(s)); }
        catch (NumberFormatException e) { return new Err("bad number: " + s); }
    }

    public static void main(String[] args) {
        System.out.println(parse("42"));
        System.out.println(parse("oops"));
    }
}

Konstruktor Ringkas untuk Validasi

Record dapat memvalidasi masukannya dalam konstruktor ringkas, sehingga setiap kasus tetap benar sejak pembentukannya.

public class Main {
    sealed interface Shape permits Circle {}
    record Circle(double radius) implements Shape {
        Circle {
            if (radius < 0) throw new IllegalArgumentException("radius must be >= 0");
        }
    }

    public static void main(String[] args) {
        try { new Circle(-1); }
        catch (IllegalArgumentException e) { System.out.println(e.getMessage()); }
    }
}

Model Data Rekursif

Karena sebuah record dapat merujuk pada antarmuka tersegel, Anda dapat membangun struktur rekursif seperti pohon ekspresi atau daftar berantai.

public class Main {
    sealed interface Expr permits Num, Add {}
    record Num(int value) implements Expr {}
    record Add(Expr left, Expr right) implements Expr {}

    public static void main(String[] args) {
        Expr e = new Add(new Num(1), new Add(new Num(2), new Num(3)));
        System.out.println(e);
    }
}

Manfaat Data yang Tidak Dapat Diubah

Record tidak dapat diubah hanya pada tingkat dangkal, sehingga hierarki record tersegel mudah dipahami, aman untuk dibagikan, dan mendukung konkurensi. Tidak diperlukan penyalinan defensif terhadap record itu sendiri.

Memadukan dengan Pencabangan

Record tersegel sangat cocok dengan switch pencocokan pola: setiap kasus dapat menguraikan record dan kompilator memeriksa apakah semua kasus telah tercakup. Hal ini dibahas dalam kursus tentang pola.

Perhitungan pada Model

Anda dapat menulis penerjemah sebagai metode yang menelusuri pohon record rekursif.

public class Main {
    sealed interface Expr permits Num, Add {}
    record Num(int value) implements Expr {}
    record Add(Expr left, Expr right) implements Expr {}

    static int eval(Expr e) {
        if (e instanceof Num n) return n.value();
        Add a = (Add) e;
        return eval(a.left()) + eval(a.right());
    }

    public static void main(String[] args) {
        Expr e = new Add(new Num(4), new Add(new Num(5), new Num(6)));
        System.out.println(eval(e));
    }
}

Pemeriksaan Singkat

Ujilah pemahaman Anda tentang record tersegel.

Rangkuman

Anda telah mempelajari cara menggabungkan tipe tersegel dengan record.

  • Record secara implisit bersifat final, sehingga dapat digunakan sebagai subtipe yang diizinkan.
  • Antarmuka tersegel dapat mendeklarasikan metode bersama.
  • Record menyediakan kesetaraan, pembuatan hash, dan toString secara otomatis.
  • Bersama-sama, keduanya memodelkan data yang tertutup, tidak dapat diubah, dan mungkin bersifat rekursif.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Sealed dengan Record” gratis?

Ya — teks lengkap “Sealed dengan Record” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Java Academy, upgrade ke CoddyKit PRO. Kursus Java Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Sealed dengan Record”?

Modelkan hierarki tertutup. Kamu berlatih Java Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Java Academy?

Tidak diperlukan pengalaman sebelumnya. Java Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Sealed dengan Record” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Java Academy ini?

Ya. Setiap pelajaran Java Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Mendeklarasikan Tipe Sealed
  2. Klausa permits
  3. Sealed dengan Record
  4. switch Menyeluruh pada Sealed
← Kembali ke Java Academy