gpt4 book ai didi

kotlin - 如何使用Java Interop处理可为空的泛型

转载 作者:行者123 更新时间:2023-12-02 13:09:17 27 4
gpt4 key购买 nike

我有一个Java类不受控制,它定义为:

public @interface ValueSource {
String[] strings() default {}
}

我试图从我控制的Kotlin文件中使用此类,如下所示:

class Thing {
@ValueSource(string = ["non-null", null])
fun performAction(value: String?) {
// Do stuff
}
}

我收到编译器错误

Kotlin: Type inference failed. Expected type mismatch: inferred type is Array<String?> but Array<String> was expected.


我知道为什么推断的类型是 Array<String?>,但是为什么预期的类型不一样?为什么Kotlin将Java泛型解释为 String!而不是 String??最后,是否有办法抑制错误?

Kotlin 1.2.61

最佳答案

这不是Kotlin的问题-此代码也无效,因为Java根本不允许注释参数中包含null值:

public class Thing {

@ValueSource(strings = {"non-null", null}) // Error: Attribute value must be constant
void performAction(String value) {
// Do stuff
}

}

有关此内容的更多讨论,请参见 this articlethis question

关于kotlin - 如何使用Java Interop处理可为空的泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52044540/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com