Mengirim enum antara kode Java dan aplikasi database atau klien, saya sering berakhir membaca dan menulis nilai enum sebagai string. toString()
disebut secara implisit ketika menggabungkan string. Overriding toString () pada beberapa enums berarti bahwa kadang-kadang saya bisa saja
"<input type='checkbox' value='" + MY_CONST1 + "'>"
dan terkadang saya harus ingat untuk menelepon
"<input type='checkbox' value='" + MY_CONST1.name() + "'>"
yang menyebabkan kesalahan, jadi saya tidak melakukan itu lagi. Sebenarnya, saya tidak mengesampingkan metode apa pun pada Enum karena jika Anda melemparkannya ke kode klien yang cukup, pada akhirnya Anda akan mematahkan harapan seseorang.
Buat nama metode baru Anda sendiri, seperti public String text()
atau toEnglish()
atau apa pun.
Ini adalah fungsi pembantu kecil yang bisa menghemat pengetikan jika Anda memiliki banyak enum seperti di atas:
public static String ucFirstLowerRest(String s) {
if ( (s == null) || (s.length() < 1) ) {
return s;
} else if (s.length() == 1) {
return s.toUpperCase();
} else {
return s.substring(0, 1).toUpperCase() + s.substring(1).toLowerCase();
}
}
Selalu mudah untuk memanggil .toUpperCase () atau .toLowerCase () tetapi mengembalikan case campuran bisa rumit. Perhatikan warnanya, "bleu de France." Prancis selalu menggunakan huruf kapital, jadi Anda mungkin ingin menambahkan metode textLower () ke enum Anda jika Anda mengalami itu. Saat Anda menggunakan teks ini di awal kalimat, vs. tengah kalimat, vs. dalam judul, Anda bisa melihat bagaimana satu toString()
metode akan gagal. Dan itu bahkan tidak menyentuh karakter yang ilegal di pengidentifikasi Java, atau yang sulit untuk mengetik karena mereka tidak diwakili pada keyboard standar, atau karakter yang tidak memiliki huruf besar (Kanji, dll.).
enum Color {
BLEU_DE_FRANCE {
@Override public String textTc() { return "Bleu De France"; }
@Override public String textLc() { return "bleu de France"; }
}
CAFE_NOIR {
@Override public String textTc() { return "Café Noir"; }
}
RED,
YELLOW,
GREEN;
// The text in title case
private final String textTc;
private Color() {
textTc = ucFirstLowerRest(this.toString());
}
// Title case
public String textTc() { return textTc; }
// For the middle of a sentence
public String textLc() { return textTc().toLowerCase(); }
// For the start of a sentence
public String textUcFirst() {
String lc = textLc();
return lc.substring(0, 1).toUpperCase() + lc.substring(1);
}
}
Tidak begitu sulit untuk menggunakan ini dengan benar:
IllegalStateException(color1.textUcFirst() + " clashes horribly with " +
color2.textLc() + "!")
Semoga itu juga menunjukkan mengapa menggunakan nilai case campuran enum akan mengecewakan Anda juga. Salah satu alasan terakhir untuk tetap menggunakan all-caps dengan konstanta garis bawah enum adalah bahwa hal tersebut mengikuti Prinsip Least Astonishment. Orang-orang mengharapkannya, jadi jika Anda melakukan sesuatu yang berbeda, Anda harus selalu menjelaskan diri sendiri, atau berurusan dengan orang-orang yang menyalahgunakan kode Anda.