Damryfbfnetsi olarak dışarı noktalarında yorumlarda, JLS §14.11 şu notu vardır:
nullAnahtar etiketi olarak kullanım yasağı, birinin asla yürütülemeyen kod yazmasını engeller. Eğer switchekspresyon bir referans tipte, bir Stringveya bir kutulu basit tür ya da enum türü, daha sonra, bir çalıştırma hatası sentezleme değerlendirilirse anlaşılacaktır nullzamanında. Java programlama dili tasarımcılarının kanaatine göre, bu, tüm switchifadeyi sessizce atlamaktan veya defaultetiketten (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 enumanahtar yerine anahtarda ortalanmış olsa da String):
Başlık altında, switchifade tipik olarak bir tablesswitch bayt koduna derlenir. Ve "fiziksel" argüman switchve davaları ints. Açılacak int değeri, yöntemi çağırarak belirlenir Enum.ordinal(). [...] sıra sayıları sıfırdan başlar.
Yani, haritalama nulliçin 0iyi 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 Stringanahtarları farklı uygulanır , enumdüğme ilk gelen ve referans olduğunda davranması gereken bir referans türüne geçiş nasıl emsal teşkil null.