我注意到我可以将double值转换为这样的整数。
var array = kotlin.arrayOfNulls<Int>(10)
for( i in array.indices ){
array[i] = ( Math.random().toInt() )
}
如果Math.random()
返回double值,double值如何具有名为toInt()的方法?数值也是对象吗?
答案 0 :(得分:5)
是的,数字类型的实例是Kotlin对象。引自Kotlin docs:
在Kotlin中,一切都是一个对象,我们可以在任何变量上调用成员函数和属性。有些类型是内置的,因为它们的实现是优化的,但对用户来说它们看起来像普通的类。
在实践中,不可为空的实例(例如intValue
而不是Double
)在JVM原语下引用。
答案 1 :(得分:1)
在Java中,任何扩展<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.challenge</groupId>
<artifactId>CarInsurance</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>com.challenge.carinsurance.CarInsuranceQuote</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.4.0</version>
</dependency>
</dependencies>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
</project>
的对象都可以调用Number
。我认为Kotlin在那里暴露了那个API。
答案 2 :(得分:1)
Kotlin编译器旨在尽可能地使用原语。这意味着使用原语,除非变量可以为空或必须装箱,因为涉及泛型。 (Docs)
对于这些转换函数(.toInt()
,.toLong()
等),调用这些函数的变量将是基元,并且在字节码中将对它们使用简单的转换。所以这里没有发生拳击,这些仍然是原始的,但你可以调用&#34;函数&#34;在他们身上作为语法糖。
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();
}