Kotlin数字文字
我注意到我可以将一个double值转换成这样的整数。
var array = kotlin.arrayOfNulls<Int>(10) for( i in array.indices ){ array[i] = ( Math.random().toInt() ) }
如果Math.random()
返回一个double值,那么double值如何有一个名为toInt()的方法? 数值也是对象吗?
是的,数字类型的实例是Kotlin对象。 从Kotlin文档引用:
在Kotlin中,所有东西都是一个对象,我们可以在任何变量上调用成员函数和属性。 有些类型是内置的,因为它们的实现是优化的,但对于用户来说,它们看起来像普通的类。
在实践中,不可空的实例(例如Double
,而不是Double?
)在JVM基元的引擎下表示。
在Java中,扩展Number
任何对象都可以调用intValue
。 我会假设Kotlin在那里暴露那个API。
Kotlin编译器旨在尽可能地使用原语。 这意味着使用原语,除非一个变量是可以为空的,或者必须被装箱,因为涉及泛型。 ( 文档 )
在这些转换函数( .toInt()
.toLong()
等)的情况下,这些函数被调用的变量将是原语,简单的转换将在字节码中被使用。 所以这里没有发生拳击,这些仍然是原始的,但你可以称它们的“功能”作为语法糖。
Math.random().toInt() // Kotlin (int) Math.random(); // Generated bytecode decompiled to Java
如果一个原始的值被赋值给一个可为空的变量,比如在你的情况下(赋值给一个Int?
类型的数组元素),它将在赋值时使用valueOf
调用进行装箱:
val n: Int? = 25 Integer n = Integer.valueOf(25);
所以你的具体任务将是上述两个例子的组合,并将像这样翻译:
array[i] = Math.random().toInt() array[i] = Integer.valueOf((int) Math.random());
如果您有兴趣更简单地替换您的示例代码:
您可以在Java中使用IntArray
(基本数组, int[]
)而不是Array<Int>
(装箱值数组,Java中的Integer[]
)。 你也可以使用lambda在构造函数的第二个参数中初始化它。
var array = IntArray(10) { Math.random().toInt() }
这大致相当于这个Java代码:
int[] array = new int[10]; for (int i = 0; i < 10; i++) { array[i] = (int) Math.random(); }
- Kotlin无法在类中使用@Configuration @EnableWebMvc注释创建@Autowired字段
- 注入一个实例Kotlin&Guice失败
- kotlin集合将一个Map转换为一个新的Map,其中的值由原始值计算得出
- jackson未能对Kotlin数据类进行反序列化
- 在ViewHolder中使用kotlin-android-extensions
- 在Mac OS的Android studio中,Kotlin查看对象的完整类型名称
- kotlin-js将字符串转换为另一种编码
- Kotlin for JavaScript的可配置工厂
- IndexOutOfBoundsException for Kotlin for循环