将null作为vararg参数的一部分从Kotlin传递给Java方法
我有一些类似于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值传递给此方法。我需要做什么来修复此行为?为此类
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)