次のコード:
void someMethod(Object value)
{
String suffix = getSuffix();
if (suffix != null)
value += suffix;
[...]
}
JDK 8では(-source 1.6を使用して)エラーなしでコンパイルされますが、JDK 6ではエラーメッセージで失敗します。
Operator '+' cannot be applied to java.lang.Object and java.lang.String
エラーの内容は理解していますが、これがJDK 8でコンパイルされるのはなぜですか?これはどこかに文書化されていますか?
値は文字列である必要はないと思います。値が整数の場合、それに文字列を追加しても意味がありません。さようなら、値を文字列にキャストしようとすることができます
—
fedoraHacker
@fedoraHackerこの式
—
グロドリゲス
value = value + suffix
は、値のタイプに関係なく完全に合法です。だから私にとってvalue += suffix
も合法である必要があります。
わあ、分からなかった。さまざまなオブジェクトの要点は、データが実行できることと実行できないことのルールを定義することだと思いました。異なるデータ型とオブジェクトを持つことの全体のポイントは、型を確実に行う責任を分離することですが、それはうまくいきます。私はあなたがそのようなデータ型を混ぜることができると困惑しています。まあ、あなたは毎日何かを学んでいます:)そして、Value = value + suffixはvalue + = suffixとまったく同じですので、構文にまったく
—
異議を唱えません
はい。ただし、文字列型はやや特殊です。ここでの+演算子は「文字列連結演算子」です。オペランドの1つだけが文字列の場合、式が評価される前に、もう1つのオペランドは文字列に変換されます。JLSのこのセクションを参照してください。
—
グロドリゲス
ああ、なるほど、文字列がそのように変換されたことを知りませんでした。質問への回答が終わっても返信に時間を割いていただきありがとうございます。
—
fedoraHacker