Corak dalam switch
Gabungkan jenis sealed dan corak
Corak dalam switch ialah pelajaran Java Academy percuma di CoddyKit. Ini ialah pelajaran 4 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Java Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Java Academy merangkumi sejumlah 4 pelajaran.
Corak dalam Pernyataan Pemilihan
Pernyataan pemilihan telah berkembang daripada memadankan pemalar kepada memadankan corak. Apabila digabungkan dengan jenis dimeterai dan rekod, pernyataan pemilihan boleh memilih tindakan berdasarkan jenis, menyahstrukturkan data, dan menjamin kesempurnaan.
Corak Jenis dalam Pernyataan Pemilihan
Setiap kes boleh berupa corak jenis yang mengikat pemboleh ubah berjenis untuk cabang tersebut.
public class Main {
static String kind(Object o) {
return switch (o) {
case Integer i -> "int " + i;
case String s -> "string " + s;
default -> "other";
};
}
public static void main(String[] args) {
System.out.println(kind(42));
System.out.println(kind("hi"));
System.out.println(kind(3.14));
}
}Jenis Dimeterai Tidak Memerlukan default
Apabila pemilih ialah jenis dimeterai dan anda merangkumi setiap subjenis yang dibenarkan, pernyataan pemilihan itu lengkap tanpa default.
public class Main {
sealed interface Shape permits Circle, Square {}
record Circle(double r) implements Shape {}
record Square(double s) implements Shape {}
static double area(Shape shape) {
return switch (shape) {
case Circle c -> Math.PI * c.r() * c.r();
case Square sq -> sq.s() * sq.s();
};
}
public static void main(String[] args) {
System.out.printf("%.2f%n", area(new Square(3)));
}
}Corak Rekod dalam Kes
Kes boleh menyahstrukturkan rekod dan mendedahkan komponennya secara terus kepada badan cabang.
public class Main {
sealed interface Shape permits Circle, Rectangle {}
record Circle(double r) implements Shape {}
record Rectangle(double w, double h) implements Shape {}
static double area(Shape shape) {
return switch (shape) {
case Circle(double r) -> Math.PI * r * r;
case Rectangle(double w, double h) -> w * h;
};
}
public static void main(String[] args) {
System.out.printf("%.2f%n", area(new Rectangle(2, 5)));
}
}Syarat Pengawal dengan when
Klausa when menambahkan syarat pengawal boolean kepada sesuatu kes. Kes itu hanya sepadan jika coraknya sesuai dan syarat pengawalnya benar.
public class Main {
static String size(Object o) {
return switch (o) {
case Integer i when i < 0 -> "negative";
case Integer i when i == 0 -> "zero";
case Integer i -> "positive";
default -> "not an int";
};
}
public static void main(String[] args) {
System.out.println(size(-5));
System.out.println(size(0));
System.out.println(size(7));
}
}Urutan Penting dengan Syarat Pengawal
Kes yang mempunyai syarat pengawal dicuba dari atas ke bawah. Kes bersyarat yang lebih khusus mesti diletakkan sebelum kes umum tanpa syarat pengawal, atau kes umum itu akan mengambil alihnya.
Mengendalikan Nilai Kosong
Tambahkan case null untuk mengendalikan pemilih yang kosong; jika tidak, pernyataan pemilihan akan melontarkan NullPointerException. Anda juga boleh menggabungkannya sebagai case null, default.
public class Main {
static String label(String s) {
return switch (s) {
case null -> "missing";
case "yes" -> "affirmative";
default -> "other: " + s;
};
}
public static void main(String[] args) {
System.out.println(label(null));
System.out.println(label("yes"));
System.out.println(label("maybe"));
}
}Corak Bersarang dalam Pernyataan Pemilihan
Kes boleh menyarang corak rekod untuk memadankan struktur yang mendalam dan menguji nilai dalaman dengan syarat pengawal di satu tempat.
public class Main {
record Point(int x, int y) {}
record Line(Point a, Point b) {}
static String describe(Object o) {
return switch (o) {
case Line(Point(var x1, var y1), Point(var x2, var y2)) when x1 == x2 -> "vertical";
case Line(Point a, Point b) -> "line";
default -> "other";
};
}
public static void main(String[] args) {
System.out.println(describe(new Line(new Point(1, 0), new Point(1, 5))));
System.out.println(describe(new Line(new Point(0, 0), new Point(2, 3))));
}
}Pernyataan dan Ungkapan
Pernyataan pemilihan bercorak berfungsi sebagai ungkapan, yang menghasilkan nilai dengan -> atau yield, dan juga sebagai pernyataan. Peraturan kesempurnaan terpakai apabila pemilih ialah jenis dimeterai.
Menggantikan Kod Pelawat
Jenis dimeterai bersama pernyataan pemilihan bercorak menggantikan corak pelawat yang panjang serta tangga instanceof dengan pemilihan tindakan yang ringkas dan disemak oleh pengompil pada model tertutup.
Pentafsir Lengkap
Penilai ungkapan yang menggunakan model dimeterai dan pernyataan pemilihan bercorak.
public class Main {
sealed interface Expr permits Num, Add, Mul {}
record Num(int value) implements Expr {}
record Add(Expr left, Expr right) implements Expr {}
record Mul(Expr left, Expr right) implements Expr {}
static int eval(Expr e) {
return switch (e) {
case Num(int v) -> v;
case Add(Expr l, Expr r) -> eval(l) + eval(r);
case Mul(Expr l, Expr r) -> eval(l) * eval(r);
};
}
public static void main(String[] args) {
Expr e = new Add(new Num(2), new Mul(new Num(3), new Num(4)));
System.out.println(eval(e));
}
}Semakan Pantas
Uji pemahaman anda tentang corak dalam pernyataan pemilihan.
Ringkasan
Anda telah mempelajari corak dalam pernyataan pemilihan.
- Kes boleh berupa corak jenis dan corak rekod, termasuk penyahstruktur.
- Pemilih yang dimeterai menghasilkan pernyataan pemilihan lengkap tanpa
default. - Syarat pengawal
whenmemperincikan kes; urutan adalah penting. case nullmengendalikan nilai kosong dengan selamat.
Pelajari Java dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 104
- Pelajaran
- 374
Soalan Lazim
Adakah pelajaran “Corak dalam switch” percuma?
Ya — teks penuh “Corak dalam switch” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Java Academy, tingkat taraf kepada CoddyKit PRO. Kursus Java Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Corak dalam switch”?
Gabungkan jenis sealed dan corak Anda berlatih Java Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Java Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Java Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 4 daripada 4.
Berapa lamakah pelajaran “Corak dalam switch” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Java Academy ini?
Ya. Setiap pelajaran Java Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Padanan Corak untuk instanceof
- Corak Record
- Corak Record Bersarang
- Corak dalam switch