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
将null作为vararg参数的一部分从Kotlin传递给Java方法_Kotlin_Kotlin Interop - Fatal编程技术网

将null作为vararg参数的一部分从Kotlin传递给Java方法

将null作为vararg参数的一部分从Kotlin传递给Java方法,kotlin,kotlin-interop,Kotlin,Kotlin Interop,我有一些类似于Java中的这个方法声明的东西。假设该类名为JavaClass: public T execute(String s, Function<T> f, Object... args) {} 奇怪的是,在执行此代码时,我得到了一个非法状态异常。它说arg2不能为null。如果它说args不能为空,我可以理解。但是考虑到这个调用会导致数组看起来像[“”,null],这在Java中是非常好的,这看起来很奇怪 我需要能够将null值传递给此方法。我需要做什么来修复此行为?为此类

我有一些类似于Java中的这个方法声明的东西。假设该类名为
JavaClass

public T execute(String s, Function<T> f, Object... args) {}
奇怪的是,在执行此代码时,我得到了一个
非法状态异常。它说
arg2不能为null
。如果它说
args
不能为空,我可以理解。但是考虑到这个调用会导致数组看起来像
[“”,null]
,这在Java中是非常好的,这看起来很奇怪


我需要能够将
null
值传递给此方法。我需要做什么来修复此行为?

为此类调用引发的
IllegalStateException
意味着该方法已返回null,并且您正在将返回值分配给非null类型的变量。它与varargs无关。

为此类调用引发的
IllegalStateException
意味着该方法已返回null,并且您正在将返回值分配给非null类型的变量。这与varargs无关。

你应该清楚地说明你想要回答的问题。你是在问这是不是一个bug?你是在问为什么做出这个设计决定吗?你是在问你怎样才能达到同样的行为?我无法复制这种行为。似乎
对象允许这样做。。。args
作为一项通过
null
——在我的测试项目中,它工作得很好。
execute
args
或封闭类是否由某个可空性注释标记?
执行
是否在内部执行任何检查?您的
IllegalStateException
的堆栈跟踪是什么?它是在Kotlin代码中抛出的还是在
execute
中抛出的?感谢您尝试重现此行为。
execute
args
或类都没有任何注释标记
args
execute
调用的助手方法检查为空。堆栈跟踪显示
java.lang.IllegalStateException:javaObject.execute(…args)在kotlinclass.kotlinfunction处不得为null。此异常表示该方法已返回
null
,并且您正在将返回值分配给非null类型的变量。这和瓦拉格一点关系都没有。天哪,谢谢@yole。如果你把它作为答案贴出来,我会接受的。你应该清楚地说明你想要回答的问题。你是在问这是不是一个bug?你是在问为什么做出这个设计决定吗?你是在问你怎样才能达到同样的行为?我无法复制这种行为。似乎
对象允许这样做。。。args
作为一项通过
null
——在我的测试项目中,它工作得很好。
execute
args
或封闭类是否由某个可空性注释标记?
执行
是否在内部执行任何检查?您的
IllegalStateException
的堆栈跟踪是什么?它是在Kotlin代码中抛出的还是在
execute
中抛出的?感谢您尝试重现此行为。
execute
args
或类都没有任何注释标记
args
execute
调用的助手方法检查为空。堆栈跟踪显示
java.lang.IllegalStateException:javaObject.execute(…args)在kotlinclass.kotlinfunction处不得为null。此异常表示该方法已返回
null
,并且您正在将返回值分配给非null类型的变量。这和瓦拉格一点关系都没有。天哪,谢谢@yole。如果你把它作为答案贴出来,我会接受的
val arg1 = ""
val arg2: String? = null
val javaObject = JavaClass()

javaObject.execute("some string", { print(it) }, arg1, arg2)