【发布时间】:2025-11-30 07:55:01
【问题描述】:
使用 Kotlin 的互操作自动化来实现可空性,这样的方法可以在 Kotlin 中获得正确的签名:
@NonNull
public String foo(@NonNull String bar) {
return "bar";
}
现在将原则提升到集合(或其他泛型,我猜):
@NonNull
public Set<String> foo(@NonNull Collection<String> bar) {
return new HashSet<String>();
}
这在 Kotlin 中显示为
foo(bar: (Mutable)Collection<String!>) : (Mutable)Set<String!>
(Mutable) 没问题,但是如何摆脱类型参数中的平台类型?也就是说,如何编写或注释 Java 函数,以便我看到来自 Kotlin 的Set<String>(或Set<String?>)?
不允许使用Set<@NonNull String>(“'@NonNull' 不适用于类型使用”)。
如果有什么不同,我会使用 Findbugs 注释(通过 Spotbugs)。我的观点是希望尽可能无缝地使用 Kotlin 的 (Java) 库提供者。
【问题讨论】:
标签: java collections kotlin interop non-nullable