Java kodum ile bir veritabanı veya istemci uygulaması arasında numaralandırma gönderirken, genellikle numaralandırma değerlerini okuma ve dizgiler olarak yazma. toString()
dizeleri birleştirirken örtük olarak çağrılır. Bazı numaralarda toString () geçersiz kılmak, bazen sadece
"<input type='checkbox' value='" + MY_CONST1 + "'>"
ve bazen aramayı hatırlamak zorunda kaldım
"<input type='checkbox' value='" + MY_CONST1.name() + "'>"
bu da hatalara yol açtı, bu yüzden artık bunu yapmıyorum. Aslında, Enum'da herhangi bir yöntemi geçersiz kılmam çünkü onları yeterli müşteri koduna atarsanız, sonunda birinin beklentilerini kıracaksınız.
Kendi yönteminizin adını public String text()
veya benzeri toEnglish()
herhangi bir şeyi yapın.
Yukarıdaki gibi çok sayıda numaralandırma varsa size bazı yazmayı kurtarabilecek küçük bir yardımcı işlev:
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();
}
}
.ToUpperCase () veya .toLowerCase () öğesini çağırmak her zaman kolaydır, ancak karışık durumu geri almak zor olabilir. "Bleu de France" rengini düşünün. Fransa her zaman büyük harfle yazılır, bu nedenle numaralandırmanızda numaralandırmanıza bir textLower () yöntemi eklemek isteyebilirsiniz. Bu metni bir cümlenin başında, bir cümlenin ortasına veya bir başlığa kullandığınızda, tek bir toString()
yöntemin nasıl kısa süreceğini görebilirsiniz. Ve bu, Java tanımlayıcılarında yasadışı olan veya yazılması zor olan karakterlere, standart klavyelerde temsil edilmediğinden veya büyük / küçük harf içermeyen karakterlere (Kanji, vb.) Bile dokunmaz.
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);
}
}
Bunları düzgün kullanmak çok zor değil:
IllegalStateException(color1.textUcFirst() + " clashes horribly with " +
color2.textLc() + "!")
Umarım bu da karışık vaka enum değerlerinin kullanılmasının neden sizi hayal kırıklığına uğratacağını gösterir. Alt çizgileri saymak sabitleri ile tüm kapaklar tutmak için son bir nedeni, bunu En Az Şaşkınlık Prensibi takip olmasıdır. İnsanlar bunu bekler, bu yüzden farklı bir şey yaparsanız, her zaman kendinizi açıklamak veya kodunuzu kötüye kullanan insanlarla uğraşmak zorunda kalacaksınız.