今日、Java 1.4 の三項条件演算子に関する予期しないバグに遭遇しました。
次のコードでは、意図した結果が得られませんでした:
product.setValue((finalAmount == 0) ? StringUtils.EMPTY : ConversionUtil.bigDecimalToString(value) + " " + code);
product.setNumber((finalAmount == 0) ? StringUtils.EMPTY : ConversionUtil.formatLongToAmountString(new Long(finalAmount)));
finalAmount == 0
がではValue
なく BlahBlahStuff に設定されている場合""
。ただし、数値は正しく設定されています。
ただし、これは機能しました:
if (finalAmount == 0) {
product.setValue(StringUtils.EMPTY);
product.setNumber(StringUtils.EMPTY);
}
else {
product.setValue(ConversionUtil.bigDecimalToString(value) + " " + code);
product.setNumber(ConversionUtil.formatLongToAmountString(new Long(finalAmount)));
}
ある行ではテストが機能するのに、他の行では機能しないのはなぜですか?
finalAmount
はプリミティブlong
であり、このメソッドに対してローカルです。
免責事項- 私は次のことを知っています:
- 2013 年に Java 1.4 を使用することは異端です。悲しいことに、私はそれについてショットを呼びません。
- 実際のソリューションはコンパクトではありませんが、テストが 2 回繰り返されないため、実際にはより効率的です。最初のものが機能しなかった理由を理解したいだけです。