Nilai dalam enum
kata saya adalah kata-kata yang perlu memiliki spasi di dalamnya, tetapi enum tidak boleh memiliki spasi dalam nilainya sehingga semuanya terkumpul. Saya ingin menimpatoString()
untuk menambahkan spasi ini di mana saya perintahkan.
Saya juga ingin enum memberikan enum yang benar saat saya gunakan valueOf()
string yang sama dengan yang saya tambahkan spasi.
Sebagai contoh:
public enum RandomEnum
{
StartHere,
StopHere
}
Panggilan toString()
pada RandomEnum
yang nilainya StartHere
kembali string yang "Start Here"
. Panggil valueof()
pada string yang sama ( "Start Here"
) mengembalikan nilai enumStartHere
.
Bagaimana saya bisa melakukan ini?
Jawaban:
Anda dapat mencoba kode ini. Karena Anda tidak dapat mengganti
valueOf
metode, Anda harus menentukan metode khusus (getEnum
dalam contoh kode di bawah) yang mengembalikan nilai yang Anda perlukan dan mengubah klien Anda untuk menggunakan metode ini.sumber
Coba ini, tetapi saya tidak yakin itu akan berhasil di mana-mana :)
sumber
Anda dapat menggunakan Map statis di enum yang memetakan Strings ke konstanta enum. Gunakan dalam metode statis 'getEnum'. Ini menghilangkan kebutuhan untuk mengulang melalui enum setiap kali Anda ingin mendapatkannya dari nilai String-nya.
Pastikan saja inisialisasi statis peta terjadi di bawah deklarasi konstanta enum.
BTW - tipe 'ImmutableMap' itu berasal dari Google guava API, dan saya merekomendasikannya dalam kasus seperti ini.
EDIT - Per komentar:
sumber
RestartHere("replay"), ReplayHere("replay")
atau tanpa 'nilai' sama sekaliPauseHere, WaitHere
(yaitu enum memiliki konstruktor default sepertiprivate RandomEnum() { this.strVal = null; }
Bagaimana dengan implementasi Java 8? (null dapat diganti dengan Enum default Anda)
Atau Anda bisa menggunakan:
sumber
Saya tidak berpikir Anda akan mendapatkan valueOf ("Start Here") untuk bekerja. Tapi sejauh spasi ... coba yang berikut ...
sumber
Berikut ini adalah alternatif umum yang bagus untuk valueOf ()
sumber
compareTo()
lebih elegan dariequals()
pada Strings?.equals()
akan berfungsi dengan baik. Bisa digunakan==
jika Anda suka. (Meskipun alasan yang baik untuk tidak melakukannya adalah jika Anda mengganti enum dengan kelas.)Anda masih memiliki opsi untuk mengimplementasikan dalam enum Anda ini:
sumber