在Java中为Kotlin编译器注释类型参数

在Java中,我有以下方法:

public Optional<Foo> getFoo() { // always return some non-null value } 

在Kotlin代码中,这个方法的返回类型是Optional<Foo!>! 。 通过使用@Nonnull注解,我可以将其降低到Optional<Foo!> (即只有Foo类型不再被空值检查)。

有没有一种方法来注释的方法,使Kotlin编译器空检查正确的返回值?

您可以通过注释Foo的类型使用来注明Kotlin编译器可以理解的一些可空性注释 。 不幸的是,列表中的一些注释库不支持类型使用注释。

我发现来自org.jetbrains:annotations:15.0 (但不是13.0)的TYPE_USE具有TYPE_USE目标,因此可以将该库作为依赖项添加到项目中,并对类型use:

 import org.jetbrains.annotations.NotNull; ... public @NotNull Optional<@NotNull Foo> getFoo() { // always return some non-null value } 

然后返回类型将在Kotlin中被视为Optional<Foo>

当然,这可以使用上面提到的支持TYPE_USE目标的列表中的任何其他可空性注释来完成。