8位十六进制数字超出Kotlin Int范围,但适用于Java int [duplicate]

问题描述 投票:0回答:1

我正在使用一个获得颜色(作为32位数字)的Android应用,我想使用Android Drawable来显示它,

我也想确保没有透明度,所以我用设置了最高有效位的掩码来OR。>

我的应用程序是用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中使用2种颜色,则构造函数接受IntArray,而不能与UIntArray一起使用。 (据我了解,无符号类型在Kotlin中是试验性的,因此,我不希望在更新Kotlin版本后再解决这些问题。)

我可以在Kotlin中使用-0xFFFFFF,并且在这种情况下似乎可以正常工作,尽管可以说我做的工作不如Java版本明显。

我想了解这种情况下的最佳处理方式,以及Java和Kotlin中存在这种差异的原因。

我正在使用一个获得颜色(作为32位数字)的Android应用程序,我想使用Android Drawable显示它,我也想确保没有透明度,所以我将其与遮罩...

java android kotlin unsigned-integer
1个回答
0
投票

自Kotlin 1.3起,您可以使用unsigned integers (),因为Int是带符号的(因此十六进制0xFF000000超出范围)。现在您可以尝试:

© www.soinside.com 2019 - 2024. All rights reserved.