Damryfbfnetsi olarak dışarı noktalarında yorumlarda, JLS §14.11 şu notu vardır:
null
Anahtar etiketi olarak kullanım yasağı, birinin asla yürütülemeyen kod yazmasını engeller. Eğer switch
ekspresyon bir referans tipte, bir String
veya bir kutulu basit tür ya da enum türü, daha sonra, bir çalıştırma hatası sentezleme değerlendirilirse anlaşılacaktır null
zamanında. Java programlama dili tasarımcılarının kanaatine göre, bu, tüm switch
ifadeyi sessizce atlamaktan veya default
etiketten (varsa ) sonra ifadeleri (varsa) yürütmeyi seçmekten daha iyi bir sonuçtur .
(vurgu benim)
Son cümle, kullanma olasılığını atlarken case null:
, mantıklı görünüyor ve dil tasarımcılarının niyetlerine bir bakış sunuyor.
Uygulama ayrıntılarına bakmayı tercih edersek, Christian Hujer tarafından yazılan bu blog gönderisindenull
, anahtarlarda neden izin verilmediğine dair bazı içgörülü spekülasyonlar var (her ne kadar enum
anahtar yerine anahtarda ortalanmış olsa da String
):
Başlık altında, switch
ifade tipik olarak bir tablesswitch bayt koduna derlenir. Ve "fiziksel" argüman switch
ve davaları int
s. Açılacak int değeri, yöntemi çağırarak belirlenir Enum.ordinal()
. [...] sıra sayıları sıfırdan başlar.
Yani, haritalama null
için 0
iyi bir fikir olmaz. İlk enum değerindeki bir anahtar, null'dan ayırt edilemez. Belki de numaralandırmalar için sıra sayılarını 1'de saymaya başlamak iyi bir fikir olabilirdi. Ancak bu şekilde tanımlanmadı ve bu tanım değiştirilemez.
İken String
anahtarları farklı uygulanır , enum
düğme ilk gelen ve referans olduğunda davranması gereken bir referans türüne geçiş nasıl emsal teşkil null
.