java - Kotlin Int 的 8 个十六进制数字超出范围,但适用于 java int
问题描述
我正在开发一个获得颜色(作为 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
为此使用 a ,但是如果我通过 ,Drawable
该类和许多其他 SDK 方法接受Int
颜色并抱怨类型UInt
。例如,如果我想在 a 中使用 2 种颜色GradientDrawable
,则构造函数接受IntArray
并且不会与 a 一起使用UIntArray
。(据我所知,无符号类型在 Kotlin 中是实验性的,所以我不想在更新 Kotlin 版本后四处“修复”这些。)
我可以-0xFFFFFF
在 Kotlin 中使用,并且在这种情况下似乎可以正常工作,尽管可以说我正在做的事情不如 java 版本那么明显。
我想了解处理这种情况的最佳方法,以及 java 和 kotlin 中存在这种差异的原因。
解决方案
从 Kotlin 1.3 开始,您可以使用带符号的无符号整数 ()Int
(因此十六进制0xFF000000
超出范围)。现在你可以试试:
// UInt instead of Int
// u suffix at the end of number
val m:UInt = 0xFF000000u
推荐阅读
- reactjs - 用户选择的日期不显示在输入框中
- android - 将小部件直接放在 Row 小部件下方
- c# - 如何在 Devexpress XtraOpenFileDialog 中禁用右键单击?
- html - 如何通过 golang 创建的 HTML 页面发送图像链接
- session - 水平缩放 JSF 2.3 应用程序
- regex - 不应允许允许在电子邮件验证中连续使用特殊字符
- angular - 带去抖动的点击不会进入订阅
- java - 使用签名哈希保护 Android 应用
- android - 如何在单击按钮时以全屏横向模式显示布局的任何部分?
- java - 从 Java 8 升级到 Java 11 后收到加载程序约束违规