Aşağıdaki kod:
void someMethod(Object value)
{
String suffix = getSuffix();
if (suffix != null)
value += suffix;
[...]
}
JDK 8'de hatasız derler (-source 1.6 kullanarak), ancak JDK 6'da hata iletisiyle başarısız olur:
Operator '+' cannot be applied to java.lang.Object and java.lang.String
Hatanın ne ile ilgili olduğunu anlasam da, bu neden JDK 8 ile derleniyor? Bu herhangi bir yerde belgelenmiş mi?
Sanırım değer String olmak zorunda değil. Değer bir tamsayı ise, o zaman bir dize eklemek mantıklı değil. Maybye, string'e değer atmayı deneyebilirsiniz
—
fedoraHacker
@fedoraHacker İfade
—
Grodriguez
value = value + suffix
, değer türünden bağımsız olarak tamamen yasaldır. Yani bana value += suffix
göre yasal olmalı.
vay, hiçbir fikrim yoktu. Farklı nesnelerin asıl amacının verinin yapabilecekleri ve yapamayacağı kuralları tanımlamak olduğunu düşündüm. Farklı veri türlerine ve nesnelere sahip olmanın asıl amacı, türlerin bir şey yaptığını, ancak iyi yaptığını sağlamak için sorumluluğu ayırmaktır. Sadece böyle veri tiplerini karıştırabileceğiniz için şaşırıyorum. Peki her gün bir şey öğrenmek :) ve Value = değer + sonek excact aynı değer + = sonek ile aynıdır, bu yüzden ben sözdizimi hiç anlaşmazlık yok
—
fedoraHacker
Evet, ancak Dize türü biraz özeldir. Burada + işleci "dize birleştirme işleci" dir; işlenenlerden yalnızca biri bir dize ise, diğeri ifade değerlendirilmeden önce bir dizeye dönüştürülür. JLS'nin bu bölümüne bakın .
—
Grodriguez
Ah görüyorum, string böyle dönüştürdü bilmiyordum. Soru cevaplandıktan sonra bile yanıt vermek için zaman ayırdığınız için teşekkür ederiz!
—
fedoraHacker