Kamu tidak bisa Saya pikir Anda memiliki EMPAT opsi di sini. Keempatnya menawarkan solusi tetapi dengan pendekatan yang sedikit berbeda ...
Opsi Satu: gunakan built-in name()
pada enum. Ini sangat baik jika Anda tidak memerlukan format penamaan khusus.
String name = Modes.mode1.name(); // Returns the name of this enum constant, exactly as declared in its enum declaration.
Opsi Dua: tambahkan properti override ke enum Anda jika Anda ingin lebih banyak kontrol
public enum Modes {
mode1 ("Fancy Mode 1"),
mode2 ("Fancy Mode 2"),
mode3 ("Fancy Mode 3");
private final String name;
private Modes(String s) {
name = s;
}
public boolean equalsName(String otherName) {
// (otherName == null) check is not needed because name.equals(null) returns false
return name.equals(otherName);
}
public String toString() {
return this.name;
}
}
Opsi Tiga: gunakan final statis daripada enum:
public final class Modes {
public static final String MODE_1 = "Fancy Mode 1";
public static final String MODE_2 = "Fancy Mode 2";
public static final String MODE_3 = "Fancy Mode 3";
private Modes() { }
}
Opsi Empat: antarmuka memiliki setiap bidang publik, statis dan final:
public interface Modes {
String MODE_1 = "Fancy Mode 1";
String MODE_2 = "Fancy Mode 2";
String MODE_3 = "Fancy Mode 3";
}
.name()
See: stackoverflow.com/a/6667365/887836Setiap enum memiliki nama () dan metode valueOf (String). Yang pertama mengembalikan nama string dari enum, dan yang terakhir memberikan nilai enum yang namanya adalah string. Apakah ini yang Anda cari?
Ada juga valueOf (Class, String) statis pada Enum itu sendiri, jadi Anda juga bisa menggunakannya
sumber
some-really-long-string
.valueOf(String)
metode ini dalam kombinasi dengantoUpperCase(Locale)
untuk memastikan konversi String.Anda bisa mengganti
toString()
metode untuk setiap nilai enum.Contoh:
Pemakaian:
sumber
Seperti yang dikatakan Benny Neugebauer, Anda bisa menimpa toString (). Namun alih-alih menimpa toString untuk setiap bidang enum, saya lebih suka sesuatu seperti ini:
Anda juga bisa menambahkan metode statis untuk mengambil semua bidang, untuk mencetak semuanya, dll. Cukup panggil getValue untuk mendapatkan string yang terkait dengan setiap item Enum
sumber
mode1.name()
atauString.valueOf(mode1)
. Saya kira tidak ada yang lebih baik dari itusumber
Anda dapat membuat panggilan seperti di bawah ini di mana pun Anda ingin mendapatkan nilai sebagai string dari enum.
Ini akan mengembalikan "Mode1" sebagai String.
sumber
Anda dapat menggunakan
Mode.mode1.name()
namun Anda sering tidak perlu melakukan ini.sumber
name()
dantoString()
bisa diganti, tetapi mudah-mudahan ini akan menjadi jelas dari membaca kode untukenum
jika ini terjadi.name()
adalahfinal
. Terima kasih telah mengoreksi saya. :)Sejauh yang saya tahu, satu-satunya cara untuk mendapatkan nama itu adalah
Namun, jika Anda benar-benar membutuhkannya, Anda dapat melakukan:
sumber
Mode.mode1
masih bukan tipeString
.Untuk enum saya, saya tidak suka memikirkan mereka dialokasikan dengan masing-masing 1 String. Ini adalah bagaimana saya menerapkan metode toString () pada enum.
sumber
return
berlebihan, karena menyalakan enum dengan semua enum berakhir.Anda cukup menggunakan:
sumber
"" + Modes.mode1
. Saya memperbaiki jawabannya''.join()
solusi saya untuk masalah Anda!
sumber
Enum hanya sedikit kelas khusus. Enum dapat menyimpan bidang tambahan, menerapkan metode, dll. Misalnya
Sekarang Anda bisa mengatakan:
System.out.println(Modes.mode1.character())
dan lihat output:
a
sumber
sumber
Metode ini harus bekerja dengan
enum
:sumber
Itu akan mencetak:
Desain ini untuk konstanta string enum bekerja di sebagian besar kasus.
sumber
setelah banyak mencoba saya datang dengan solusi ini
sumber
Anda dapat mencoba ini:
}
sumber
saya menemukan ini lebih mudah untuk mencegah kesalahan tipe:
Namun - ini dapat bekerja ketika Anda perlu menggunakan String pada log / println atau setiap kali java mengkompilasi metode toString () secara otomatis, tetapi pada baris kode seperti ini ->
alih-alih seperti yang disebutkan di atas, Anda masih harus memperpanjang enum dan menggunakannya
.name()
dalam kasus-kasus seperti ini:sumber