Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
科特林';如果参数编译时不是实际类型,则s javaclass.isPrimitive将失败_Class_Kotlin_Primitive - Fatal编程技术网

科特林';如果参数编译时不是实际类型,则s javaclass.isPrimitive将失败

科特林';如果参数编译时不是实际类型,则s javaclass.isPrimitive将失败,class,kotlin,primitive,Class,Kotlin,Primitive,下面的代码 fun foo(value:Double) { if(!value.javaClass.isPrimitive) { println("try again") return } } println("that's nice") } fun main() { foo(0.0) } 显示: “太好了” 但是设置值类型为任何: fun foo(value:Any) {

下面的代码

fun foo(value:Double) {
    if(!value.javaClass.isPrimitive) {
        println("try again")
        return
    }
}
    println("that's nice")
}

fun main() {
    foo(0.0)
}
显示: “太好了”

但是设置
类型为
任何

fun foo(value:Any) {
        if(!value.javaClass.isPrimitive) {
            println("try again")
            return
        }
        println("that's nice")
    }

fun main() {
    foo(0.0)
}
将显示“重试” 即使
运行时类型
双精度
, 测试链接:

引自:

内联val T.javaClass:Class

返回此对象的运行时Java类

哪一个应该给我权利


编辑:当您将类型声明为
Double
时,删除了不必要的运行{}

,这是一个原语
Double
(而不是
Double
包装类)


当您将类型声明为
Any
时,该方法将接受任何对象作为参数,因此即使您传入原语
double
,它也将自动装箱到
double
的包装器对象中,不再是原语

通过在以下服务器上运行此代码段,可以看到这一点:

印刷品:

double
java.lang.Double

当您将类型声明为
Double
时,这是一个原语
Double
(而不是
Double
包装类)


当您将类型声明为
Any
时,该方法将接受任何对象作为参数,因此即使您传入原语
double
,它也将自动装箱到
double
的包装器对象中,不再是原语

通过在以下服务器上运行此代码段,可以看到这一点:

印刷品:

double
java.lang.Double
包装类难道没有“isPrimitive”这样的方法吗

不是直接的,但是您可以通过以下方式检查值是否属于包装器类

value::class.javaPrimitiveType != null
或者如果您只有一个
clazz:Class

包装类难道没有“isPrimitive”这样的方法吗

不是直接的,但是您可以通过以下方式检查值是否属于包装器类

value::class.javaPrimitiveType != null
或者如果您只有一个
clazz:Class


我怎么才能理解呢?我需要分析任何类型的值这就是您正在做的,通过将类型声明为
any
。一个方法不能同时接受一个基元和一个对象,所以要支持它,基元必须自动装箱到包装器对象中。但我只能接受某些类型的数据:基元、字符串和某个类,我拒绝其他类型,包装器类不是有“isPrimitive”这样的方法吗?如果你只能接受某些类型,为什么不为那些受支持的类型显式声明方法?这样,如果传入一个不受支持的值,则在编译时会失败。我该如何处理这个问题呢?我需要分析任何类型的值这就是您正在做的,通过将类型声明为
any
。一个方法不能同时接受一个基元和一个对象,所以要支持它,基元必须自动装箱到包装器对象中。但我只能接受某些类型的数据:基元、字符串和某个类,我拒绝其他类型,包装器类不是有“isPrimitive”这样的方法吗?如果你只能接受某些类型,为什么不为那些受支持的类型显式声明方法?这样,如果传入不受支持的值,则在编译时会失败。