8个十六进制数字超出Kotlin Int的范围,但适用于java Int

8个十六进制数字超出Kotlin Int的范围,但适用于java Int,java,android,kotlin,unsigned-integer,Java,Android,Kotlin,Unsigned Integer,我正在开发一款Android应用程序,它可以获得一种颜色(32位数字),我想用一款Android可绘制的来展示它 我还想确保没有透明度,所以我用一个设置了最高有效位的掩码来设置它 我的应用程序是用Kotlin编写的,所以这个数字属于Int类型 在Java中,我认为以下方法可行 int colorInt = myColor || 0xFF000000; 我和Kotlin试过以下方法 var colorInt:Int = myColor or 0xFF000000 // Error - Integ

我正在开发一款Android应用程序,它可以获得一种颜色(32位数字),我想用一款Android
可绘制的
来展示它

我还想确保没有透明度,所以我用一个设置了最高有效位的掩码来设置它

我的应用程序是用Kotlin编写的,所以这个数字属于
Int
类型

在Java中,我认为以下方法可行

int colorInt = myColor || 0xFF000000;
我和Kotlin试过以下方法

var colorInt:Int = myColor or 0xFF000000 // Error - Integer literal does not conform to the expected type of Int
这表明
0xFF000000
超出了
Int

我可以使用
UInt
,但是
Drawable
类和许多其他SDK方法接受
Int
作为颜色,如果我通过
UInt
,就会抱怨类型。 例如,如果我想在
GradientDrawable
中使用两种颜色,则构造函数接受
IntArray
,而不会使用
UIntArray
。(据我所知,未签名类型在Kotlin中是实验性的,因此我不希望在更新Kotlin版本后再“修复”这些类型。)

我可以在Kotlin中使用
-0xFFFFFF
,这在本例中似乎很好,尽管可以说我所做的事情不如java版本那么明显


我想了解处理这种情况的最佳方法,以及java和kotlin中存在这种差异的原因。

因为kotlin 1.3可以在Int
有符号时使用(因此十六进制
0xFF000000
超出范围)。现在您可以尝试:

// UInt instead of Int
// u suffix at the end of number
val m:UInt = 0xFF000000u

由于Kotlin 1.3可以使用as
Int
进行签名(因此十六进制
0xFF000000
超出范围)。现在您可以尝试:

// UInt instead of Int
// u suffix at the end of number
val m:UInt = 0xFF000000u

不能使用UInt,然后使用toInt()函数将UInt转换为普通Int???哇。。是的。谢谢你不能使用UInt,然后是toInt()函数将UInt转换为普通Int???哇。。是的。谢谢,我不能使用
UInt
,因为SDK方法需要Int。我使用了
0xFF000000.toInt()
作为相关问题。谢谢。我不能使用
UInt
,因为SDK方法需要Int。我使用了
0xFF000000.toInt()
作为相关问题。谢谢你。