Kode berikut:
void someMethod(Object value)
{
String suffix = getSuffix();
if (suffix != null)
value += suffix;
[...]
}
kompilasi tanpa kesalahan di JDK 8 (menggunakan -sumber 1.6), tetapi gagal di JDK 6 dengan pesan kesalahan:
Operator '+' cannot be applied to java.lang.Object and java.lang.String
Sementara saya mengerti apa kesalahannya, mengapa ini dikompilasi dengan JDK 8? Apakah ini didokumentasikan di mana saja?
value = value + suffix
ini sepenuhnya legal terlepas dari jenis nilainya. Jadi menurut sayavalue += suffix
harus legal juga.Jawaban:
JLS 15.26.2. Operator Penugasan Senyawa menyatakan:
Kalimat itu sama dari Jawa 6 ke Jawa 14 , dan kemungkinan tidak pernah berubah sejak awal Jawa.
Begitu
value += suffix
juga denganvalue = (Object) (value + suffix)
Kompiler Java 6 seharusnya tidak gagal untuk mengkompilasi pernyataan itu.
sumber
value = (Object) (value + suffix)
harus dikompilasi.