Koşullu ifade türü' ve < '; boş> int arasında örtülü dönüşüm yok belirlenemiyor;
Neden bu derleme değil mi?
int? number = true ? 5 : null;
Tür koşullu ifade edemiyor 'int' <boş> . arasında örtülü dönüşüm yok çünkü belirlenecek
CEVAP
Spec (§7.14) şartlı ifade için b ? x : y
, üç ihtimal var, ya da x
y
her iki türü olduğunu söylüyorvebelliiyi koşullarkarşılanması, x
y
Bir tür vardırvebelliiyi koşullaryerine, bir derleme zamanı hatası oluşur. Burada, "belirli şartlarda belirli dönüşümleri mümkündür, aşağıda detayları biz alacaksınız." anlamına gelir
Şimdi spec ilgili kısmına dönelim:
Eğer sadece
x
y
bir tip vardır, ve her ikisi dex
y
örtük olarak dönüştürülebilir için bu tip, bu tür koşullu deyim.
Sorun burada
int? number = true ? 5 : null;
koşullu sonuçların sadece bir türü vardır. Burada x
int
bir edebi ve y
yok null
değilbir türü varnull
int
Bir değil, örtük olarak dönüştürülebilir1. Bu nedenle, "belirli şartlarda" bir araya geldi değil, bir derleme zamanı hatası oluşur.
Yokbu yaklaşık iki yolu vardır:
int? number = true ? (int?)5 : null;
Burada x
y
tek bir türü olduğu hala durumda. null
unutmayınhalabir türü yok derleyici (int?)5
null
int?
(madde 6.1.4 ve madde 6.1.5) örtük olarak dönüştürülebilir çünkü bu ile herhangi bir sorun olmaz henüz.
Diğer yol ise belli:
int? number = true ? 5 : (int?)null;
ama şimdi bir okumalıyızfarklıspec fıkra bu sorun neden anlamak için:
x
türüX
y
32* *türü vardır
Eğer bir örtük dönüştürme (madde 6.1) var
X
Y
amaY
X
Y
tür koşullu deyim.Eğer bir örtük dönüştürme (madde 6.1) var
Y
X
amaX
Y
X
tür koşullu deyim.Aksi takdirde, hiçbir ifade türü belirlenebilir ve bir derleme zamanı hatası oluşur.
Burada x
int
y
46* *türü türüdür. int
int?
örtülü dönüşüm yok ama ifade türü int?
int?
int
örtülü bir dönüşüm var.
1Sol tarafta türü koşullu deyim, bu karışıklık bir ortak kaynak burada tipini belirlemede göz ardı olduğunu da unutmayın.
Örtülü dönüşüm numaralandırma türü �...
Varlık Çerçevesi - türü Olamaz 'd...
Nasıl dönüşüm gıt çekirdek ile işi bit...
Java arasında basit dönüşüm.açıklama.T...
Parantez arasında bir dize almak için ...