Saya telah melihat berbagai Tanya Jawab tentang SO yang mirip dengan pertanyaan ini tetapi belum menemukan solusi.
Yang saya miliki adalah enum yang mewakili berbagai cara untuk melihat Panduan TV ...
Di Application
kelas NDroid
static enum guideView {
GUIDE_VIEW_SEVEN_DAY,
GUIDE_VIEW_NOW_SHOWING,
GUIDE_VIEW_ALL_TIMESLOTS
}
... ketika pengguna mengubah tampilan yang diterima event handler int
dari 0-2 dan saya ingin melakukan sesuatu seperti ini ...
Dalam Activity
onClick(DialogInterface dialog, int which)
penanganan peristiwa Android
// 'which' is an int from 0-2
switch (which) {
case NDroid.guideView.GUIDE_VIEW_SEVEN_DAY:
...
break;
}
Saya sudah terbiasa dengan C # enums dan pernyataan pilih / case yang akan memungkinkan sesuatu seperti di atas dan saya tahu Java melakukan sesuatu secara berbeda tetapi saya tidak dapat memahami apa yang perlu saya lakukan.
Apakah saya harus menggunakan if
pernyataan? Kemungkinan hanya akan ada 3 pilihan jadi saya bisa melakukannya tapi saya bertanya-tanya bagaimana itu bisa dilakukan dengan switch-case di Java.
EDIT Maaf saya tidak sepenuhnya memperluas masalah ini karena saya melihatnya sebagai masalah Java umum. Saya telah menambahkan pertanyaan untuk menjelaskan lebih jauh.
Tidak ada apa pun yang khusus Android, itulah sebabnya saya tidak menandainya sebagai Android tetapi enum didefinisikan di Application
kelas dan kode di mana saya tidak ingin sakelar di Activity
. Enumnya statis karena saya perlu mengaksesnya dari beberapa Aktivitas.
sumber
case GUIDE_VIEW_SEVEN_DAY
setelah impor yang tepat; permasalahan apa yang kamu hadapi?OnClickListener
) didefinisikan olehDialogInterface
antarmuka yang harus saya implementasikan.Jawaban:
Bagian yang Anda lewatkan adalah mengonversi dari integer ke enum type-safe. Java tidak akan melakukannya secara otomatis. Ada beberapa cara untuk melakukan ini:
guideView.GUIDE_VIEW_SEVEN_DAY.ordinal()
Tentukan nilai enum yang diwakili oleh nilai int dan kemudian aktifkan nilai enum.
Anda mungkin merasa lebih membantu / lebih sedikit kesalahan yang rawan untuk menulis
valueOf
implementasi kustom yang menggunakan nilai integer Anda sebagai argumen untuk menyelesaikan nilai enum yang sesuai dan memungkinkan Anda memusatkan pemeriksaan batas.sumber
case GuideView.SEVEN_DAY:
berikan kesalahan kompilasi, seharusnya begitucase SEVEN_DAY:
.Jika
whichView
merupakan objek dari GuideView Enum, berikut ini berfungsi dengan baik. Harap dicatat bahwa tidak ada kualifikasi untuk konstanta setelahnyacase
.sumber
Enum tidak boleh memenuhi syarat dalam label kasus seperti yang Anda miliki
NDroid.guideView.GUIDE_VIEW_SEVEN_DAY
, sebaliknya Anda harus menghapus kualifikasi dan penggunaanGUIDE_VIEW_SEVEN_DAY
sumber
Saya suka beberapa penggunaan Java enum:
enum dengan parameter nilai:
contoh saklar:
sumber
Ini harus bekerja dengan cara yang Anda gambarkan. Kesalahan apa yang Anda dapatkan? Jika Anda bisa menyisipkan kode Anda itu akan membantu.
http://download.oracle.com/javase/tutorial/java/javaOO/enum.html
EDIT: Apakah Anda yakin ingin menentukan enum statis? Itu kedengarannya tidak benar bagi saya. Enum sama seperti objek lainnya. Jika kode Anda dikompilasi dan dijalankan tetapi memberikan hasil yang salah, mungkin inilah penyebabnya.
sumber
sumber
Contoh fungsi asosiatif singkat:
Seperti yang dikatakan @Dhanushka, hilangkan kualifikasi di dalam "switch" adalah kuncinya.
sumber
Saya melakukannya seperti
Dan gunakan dalam Pernyataan Switch
sumber