2016-05-14 7 views
2

以下のコードは私に次のエラーを与えます。バイトでプラス演算子を使用する

エラー:型の不一致:推論タイプはkotlin.Intですがkotlin.Byteが

var temp: Byte = 0 
var temp2: Byte = 1 
temp += temp2 

kotlinでこれを回避方法はあり

を期待されていたか、私は+ =または使用することを許可されていないです - =演算子をバイトで?プラスと等しいがLongとIntではオーバーロードされますが、ByteとShortではオーバーロードされませんか?

+0

plusAssign()が見つからず、型チェックを行うと代入用の演算子オーバーロードのように見えます。 https://kotlinlang.org/docs/reference/operator-overloading.html – frognosis

+1

解決されるかどうかわからないkotlinプロジェクトの問題が見つかりました。 https://youtrack.jetbrains.com/issue/KT-7907 – frognosis

答えて

3

によると、kotlin docs Byteの他のByteとのプラスマイナス演算は、Int。だからあなたはそれが異常だと思う間255の値を持つByteを255の値で他のByteに加えることを試みてください;)

彼らは意図的に作ったと思います。あなたの結果がまだバイト境界内にあることが確かな場合は、Int.toByte()と計算の終了を使用してください。

+1

問題を見つけましたが、プラスとマイナスはintよりもByteとShortを返すようです。私は現在、temp =(temp + temp2).toByte()をコード内で行っていますが、+ =演算子を使用します。 – frognosis

+0

追加後にオーバーフローが発生する場合はどうしたらよいでしょうか?それは自動的にバイトに切り捨てられるか、またはそれをオーバーフローにする必要がありますか? Kotlinの第一の目標は、開発者の人生をより安全にすることです(したがって、null許容性への新しいアプローチ)。私の意見では、あなたが遭遇した問題はまさにそのようなケースです。 –

+1

@ R4J True、「Int」や「Long」でも同じことが言えます。 'Byte' +' Byte'は 'Byte'を返すべきだと言っているわけではなく、' Int' + 'Int''が' Long'を返すべきであるということに同意するわけではありません。 さらに、オーバーフローが必要な合理的な使用例があります。 –

関連する問題