Neden't Dize deyimi destek boş bir durumda anahtarı değil mi?
Sadece 7 switch
açıklama null
dava desteklemiyor neden merak ediyorum ve yerine NullPointerException
atar? Bakın aşağıda çizgi yorumladı (örnek the Java Tutorials article on switch
alınan):
{
String month = null;
switch (month) {
case "january":
monthNumber = 1;
break;
case "february":
monthNumber = 2;
break;
case "march":
monthNumber = 3;
break;
//case null:
default:
monthNumber = 0;
break;
}
return monthNumber;
}
Bu switch
her kullanımdan önce null kontrolü için if
bir koşul Kaçınılması olurdu.
CEVAP
Damryfbfnetsi yorum points out, JLS §14.11 aşağıdaki not var
Anahtar, bir etiket olarak
null
kullanarak karşı yasak asla çalıştırılabilir kod yazma birer engel. Eğerswitch
ifadesidir bir başvuru türü,String
veya kutulu ilkel türü ya da bir numaralandırma türü, o zaman bir çalışma zamanı hatası oluşur deyimi değerlendirir içinnull
zamanında.Bu kıyamet tasarımcılarının Java programlama dili, bu daha iyi bir sonuç daha sessizce atlama tümswitch
bildirim ya da seçmek için idam ifadeleri (varsa) sonradefault
etiketi (varsa).
(vurgu benim)
Son cümle ise kullanma imkanı atlar case null:
makul görünüyor ve diline bir görünüm sağlar tasarımcıların niyeti.
Eğer biz yerine bak Uygulama Detayları, this blog post Hıristiyan Hujer var biraz anlayışlı spekülasyon hakkında neden null
değil izin anahtarları (gerçi merkezleri enum
anahtarları yerine String
s):
Kaputun altında,
switch
deyimi genellikle tablesswitch bayt koduna derlenir. Ve "fiziksel" değişkenswitch
iyi durumdaint
ler. Açmak için int değeri 21* *yöntemini çağırarak belirlenir. [...] Sıra sayıları sıfırdan başlar.Bu,
0
22 *eşleme iyi bir fikir değil demektir. İlk numaralandırma değeri bir anahtar boş, indistinguishible olurdu. Belki numaralamalar için sıra sayılarını sayma 1 de başlamak için iyi bir fikir olurdu. Ancak böyle tanımlanmış alamadım, ve bu tanım değiştirilebilir.
String
are implemented differently, anahtarları enum
anahtarı ilk geldi ve bir başvuru türüne geçiş başvurusu null
ne zaman nasıl davranması gerektiği için bir emsal teşkil etmeli.
Neden bir dize ile gidiş-dönüş dönüştü...
Neden eğer sözlük anahtarı varsa kontr...
Neden't Dize değil.Boş bir sabit?...
C# deyimi sınırlamalar - neden?anahtar...
Neden yeni bir Dize (&;" quot;) c ...