私は気づいた、興味深いものが1つあります。
JavaのInteger.MAX_VALUE
ある0x7fffffff
(2147483647)
KotlinのInt.MAX_VALUE
2147483647
ですが、あなたはJavaで
書く場合:Kotlinで
int value = 0xFFFFFFFF; //everything is fine (but printed value is '-1')
:
val value: Int = 0xFFFFFFFF //You get exception The integer literal does not conform to the expected type Int
Java Integer.MAX_VALUEとKotlin Int.MAX_VALUE
興味深い権利を?だから、あなたはJavaでnew java.awt.Color(0xFFFFFFFF, true)
のようなことをすることができますが、ではなく、でKotlinを実行できます。
Color
クラスはそのintを「バイナリ」レベルで処理するので、すべてのコンストラクタ(Color(int rgba)
またはColor(int r, int g, int b, int a)
)を持つ両方のプラットフォームですべて正常に動作します。
kotlinで見つかった回避策はjava.awt.Color(0xFFFFFFFF.toInt(), true)
です。
なぜ、Kotlinではこれがこのようなのでしょうか?
私はJavaが自動的に数を「Int」から「Long」に広げると思います。 --- https://kotlinlang.org/docs/reference/basic-types.htmlを参照してください。またhttp://www.java2s.com/Tutorial/SCJP/0080__Type-Casting/WideningandNarrowconversions.htmも参照してください。 - Kotlinでは、あまりにも狭いタイプを選んだことからあなたを救うために、言語自動化は明示的に行う必要があります。 –
@Mörre '0xFFFFFFFF'は' int'として '-1'の有効な2の補数表現です。 2つの言語の違いは、Kotlinのリテラルが2の補数表記を受け入れるように見えないことです。リテラル '0x80000000'はエラーです(Javaでは' Integer.MIN_VALUE'です)。言い換えれば、負のリテラルを表すには、単項 '--'演算子を使用する必要があります。私はどちらの言語の仕様でもこれについて具体的に言及することはできませんが。 – bcsb1001
@ bcsb1001 'Integer.MAX_VALUE'をご覧ください –