Jawa switch pernyataan beberapa kasus
Hanya mencoba untuk mencari tahu bagaimana menggunakan banyak beberapa kasus untuk Java pernyataan switch. Berikut ini's contoh dari apa yang saya'm mencoba untuk melakukan:
switch (variable)
{
case 5..100:
doSomething();
break;
}
dibandingkan harus melakukan:
switch (variable)
{
case 5:
case 6:
etc.
case 100:
doSomething();
break;
}
Ide jika ini mungkin, atau apa alternatif yang baik adalah?
107
12
Sayangnya, hal's tidak mungkin di pulau Jawa. Anda'll harus resor untuk menggunakan
if-else
pernyataan.Pilihan kedua adalah yang benar-benar baik-baik saja. I'm tidak yakin mengapa responden mengatakan hal itu tidak mungkin. Ini baik-baik saja, dan aku melakukan hal ini sepanjang waktu:
Mungkin tidak elegan seperti beberapa jawaban sebelumnya, tetapi jika anda ingin untuk mencapai beralih kasus dengan beberapa rentang besar, hanya menggabungkan berkisar pada satu hal terlebih dahulu:
Satu Object Oriented pilihan untuk menggantikan terlalu besar
switch
danif/else
konstruksi adalah dengan menggunakanRantai tanggung Jawab Pola
untuk model pengambilan keputusan.Rantai tanggung Jawab Pola
Berikut adalah contoh implementasi yang juga Tipe Aman dengan menggunakan obat Generik.
Ini adalah hanya cepat jerami pria yang aku dikocok sampai dalam beberapa menit, yang lebih canggih implementasi mungkin memungkinkan untuk beberapa jenis Perintah
Pola
yang akan disuntikkan ke dalamKasus
implementasi contoh untuk membuatnya lebih dari sebuah panggilan kembali IoC gaya.Sekali hal yang baik tentang pendekatan ini adalah bahwa Switch/laporan Kasus ini adalah semua tentang mempengaruhi sisi, ini merangkum efek samping di Kelas sehingga mereka dapat dikelola, dan digunakan kembali baik, itu berakhir menjadi lebih seperti Pencocokan Pola dalam bahasa Fungsional dan bahwa isn't hal yang buruk.
Saya akan posting setiap update atau tambahan untuk ini Inti pada Github.
Menurut pertanyaan, it's benar-benar mungkin.
Hanya menempatkan semua kasus-kasus yang mengandung logika yang sama bersama-sama, dan don't menempatkan
istirahat
di belakang mereka.It's karena
kasus
tanpaistirahat
akan melompat ke yang lainkasus
sampaibreak
ataukembali
.EDIT:
Membalas komentar, jika kita benar-benar memiliki nilai-nilai 95 dengan logika yang sama, tetapi cara yang lebih kecil jumlah kasus dengan logika yang berbeda, yang bisa kita lakukan:
Jika anda membutuhkan kontrol yang lebih baik,
if-else
adalah pilihan.Pada dasarnya:
// Noncompliant Contoh Kode
//Solusi Compliant
Hal ini dimungkinkan untuk menangani ini menggunakan Vavr perpustakaan
Hal ini tentu saja hanya sedikit perbaikan karena semua kasus yang masih perlu tercantum secara eksplisit. Tapi itu mudah untuk mendefinisikan custom predikat:
Pertandingan ekspresi jadi di sini itu kembali sesuatu seperti
Runnable
contoh bukan menerapkan metode ini diatas. Setelah pertandingan yang dilakukanRunnable
dapat dieksekusi.Untuk rincian lebih lanjut silakan lihat dokumentasi resmi.
untuk alternatif, anda dapat menggunakan seperti di bawah ini:
Dari terakhir java-12 rilis beberapa konstanta dalam kasus yang sama label tersedia di preview fitur bahasa
Itu terlihat seperti:
Lihat lebih banyak JEP 325: Beralih Ekspresi (Preview)
Salah satu alternatif daripada menggunakan hard-coded nilai-nilai yang bisa menggunakan berbagai pemetaan pada pernyataan switch sebagai gantinya: