0Pricing
Java Academy · Pelajaran

Klausa permits

Daftarkan subtipe yang diizinkan.

Klausa permits adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 2 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.

Klausa Izin

Klausa permits adalah cara bagi tipe tersegel untuk menyebutkan subtipe yang diizinkan. Klausa ini berada tepat setelah nama tipe dan kata kunci permits.

Sintaks Dasar

Cantumkan subtipe yang diizinkan, dipisahkan dengan koma, setelah permits.

public class Main {
    sealed interface Vehicle permits Car, Truck, Motorcycle {}
    record Car() implements Vehicle {}
    record Truck() implements Vehicle {}
    record Motorcycle() implements Vehicle {}

    public static void main(String[] args) {
        Vehicle v = new Truck();
        System.out.println(v.getClass().getSimpleName());
    }
}

Menerapkan Kontrak

Setiap subtipe yang disebutkan harus benar-benar implements (untuk antarmuka) atau extends (untuk kelas) tipe tersegel tersebut. Mencantumkan kelas dalam permits yang tidak melakukannya merupakan kesalahan kompilasi.

Menghilangkan Klausa Izin

Jika semua subtipe yang diizinkan dideklarasikan dalam berkas yang sama dengan tipe tersegel, Anda dapat menghilangkan permits sepenuhnya. Kompilator akan menyimpulkan daftarnya secara otomatis.

public class Main {
    sealed interface Status {}
    record Active() implements Status {}
    record Inactive() implements Status {}

    public static void main(String[] args) {
        Status s = new Active();
        System.out.println(s.getClass().getSimpleName());
    }
}

Kapan Klausa Izin Diperlukan

Jika subtipe berada dalam berkas terpisah di dalam paket atau modul yang sama, Anda harus mencantumkannya secara eksplisit dalam permits. Kompilator tidak dapat menyimpulkan daftar tersebut dari berbagai berkas.

Urutan Tidak Berpengaruh

Urutan nama dalam permits tidak memiliki makna semantik. Urutan tersebut tidak memengaruhi perilaku switch atau hal lainnya; urutan itu murni merupakan daftar tipe yang diizinkan.

Hierarki Kelas dengan Klausa Izin

Klausa yang sama berlaku untuk kelas tersegel dengan perilaku abstrak.

public class Main {
    sealed static abstract class Node permits Leaf, Branch {
        abstract int size();
    }
    static final class Leaf extends Node {
        int size() { return 1; }
    }
    static final class Branch extends Node {
        final Node a, b;
        Branch(Node a, Node b) { this.a = a; this.b = b; }
        int size() { return a.size() + b.size(); }
    }

    public static void main(String[] args) {
        Node tree = new Branch(new Leaf(), new Branch(new Leaf(), new Leaf()));
        System.out.println("Leaves: " + tree.size());
    }
}

Melupakan Subtipe

Jika suatu kelas mengimplementasikan antarmuka tersegel tetapi tidak tercantum dalam permits, kompilasi akan gagal dengan pesan bahwa kelas tersebut tidak diizinkan mewarisi tipe tersegel.

Tipe yang Diizinkan Bersifat Terbuka

Daftar permits merupakan bagian dari kontrak tipe dan dicatat dalam berkas kelas. Alat bantu dan kompilator dapat membacanya untuk mengetahui seluruh himpunan subtipe.

Mencampur Subtipe yang Berakhir dan Tersegel

Daftar permits dapat mencampur modifier: beberapa subtipe final, sementara yang lain sealed untuk melanjutkan hierarki ke tingkat yang lebih dalam.

public class Main {
    sealed interface Shape permits Circle, Polygon {}
    record Circle(double r) implements Shape {}
    sealed interface Polygon extends Shape permits Triangle, Rectangle {}
    record Triangle() implements Polygon {}
    record Rectangle() implements Polygon {}

    public static void main(String[] args) {
        Shape s = new Triangle();
        System.out.println(s instanceof Polygon);
    }
}

Praktik Terbaik

Jaga agar tipe tersegel dan subtipenya tetap berdekatan demi keterbacaan. Sebaiknya hilangkan permits untuk hierarki kecil dalam satu berkas, dan cantumkan secara eksplisit ketika berkas dipisahkan.

Pemeriksaan Singkat

Ujilah pemahaman Anda tentang klausa izin.

Rangkuman

Anda telah mempelajari klausa permits.

  • Klausa ini mencantumkan subtipe yang diizinkan setelah nama tipe tersegel.
  • Setiap tipe yang dicantumkan harus mewarisi atau mengimplementasikan tipe tersegel.
  • Klausa ini dapat dihilangkan jika semua subtipe berada dalam berkas yang sama.
  • Subtipe juga dapat dibuat tersegel untuk memperluas hierarki.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Klausa permits” gratis?

Ya — teks lengkap “Klausa permits” 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 “Klausa permits”?

Daftarkan subtipe yang diizinkan. 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 2 dari 4.

Berapa lama pelajaran “Klausa permits” 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