如何使用 Java 互操作处理可空泛型
How to handle nullable generics with Java interop
我有一个 Java class 是我无法控制的,定义为:
public @interface ValueSource {
String[] strings() default {}
}
我正在尝试从我控制的 Kotlin 文件中使用这个 class,如下所示:
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?
?最后,有没有办法抑制错误?
科特林 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 article and this question。
我有一个 Java class 是我无法控制的,定义为:
public @interface ValueSource {
String[] strings() default {}
}
我正在尝试从我控制的 Kotlin 文件中使用这个 class,如下所示:
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?
?最后,有没有办法抑制错误?
科特林 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 article and this question。