Kotlin数字文字

时间:2017-07-01 23:34:19

标签: kotlin

我注意到我可以将double值转换为这样的整数。

var array = kotlin.arrayOfNulls<Int>(10)

for( i in array.indices ){
    array[i] = ( Math.random().toInt() )
}

如果Math.random()返回double值,double值如何具有名为toInt()的方法?数值也是对象吗?

3 个答案:

答案 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();
}