如何检查Kotlin变量的类型

时间:2018-10-08 06:09:06

标签: variables if-statement kotlin

我正在编写一个Kotlin程序,其中type的变量为inferred,但后来我希望知道此变量存储的是哪种类型的值。我尝试了以下操作,但显示以下错误。

Incompatible types: Float and Double

val b = 4.33 // inferred type of what
if (b is Float) {
    println("Inferred type is Float")
} else if (b is Double){
    println("Inferred type is Double")        
}

4 个答案:

答案 0 :(得分:0)

您有此错误,因为您的b变量已经为Double,因此无论如何都不能为Float。如果要测试if语句,可以更改变量初始化,如下所示:

val b: Number = 4.33 // Number type can store Double, Float and some others

通过if语句替换when的方式

when (b) {
    is Float -> println("Inferred type is Float")
    is Double -> println("Inferred type is Double")
    else -> //some default action
}

答案 1 :(得分:0)

您可以使用b::class.simpleName来返回对象类型为String

您不必初始化变量的类型,以后您要检查变量的类型。

fun main(args : Array<String>){
    val b = 4.33 // inferred type of what
    when (b::class.simpleName) {
    "Double" -> print("Inferred type is Double")
    "Float" -> print("Inferred type is Float")
    else -> { // Note the block
        print("b is neither Float nor Double")
    }
}

}

答案 2 :(得分:0)

我认为您做对了所有事情。出现错误Incompatible types: Float and Double是因为您正在分配一个const值(并且将其分配给val,所以它不会改变),可以在编译期间检查该值。这意味着编译器已经知道什么类型的变量。但是,如果像这样在执行期间获得该值,则此检查将执行您想要的操作。

fun main() {
    val b = getNumber() // inferred type of what
    if (b is Float) {
        println("Inferred type is Float")
    } else if (b is Double){
        println("Inferred type is Double")        
    }
}

fun getNumber():Number {
    return 12.0
}

答案 3 :(得分:0)

推断的类型意味着编译器已检索到对象的数据类型。

因此,val b = 4.33是Double(基于kotlin编译器)。

因此,它在所有地方都假设'b'为Double。

如果要将变量分配给不同的数据类型,则必须使用Any

喜欢

fun main(vararg abc : String) {
    var b : Any = 4.33 // inferred type of what
    println(b)

    if(b is Float) {
        println("Float")
    }

    else if(b is Double) {
        println("Double")
    }

    b = "hello"
    println(b)
    if(b is String) {
        println("String")
    }
}

输出

4.33
Double
hello
String

Any与Java中的Object类相同,可以保存任何类型的数据,并且您必须注意对象类型