2017-07-25 76 views
2

在Java中,我有以下方法:注释类型参数在Java中的科特林编译

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

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

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

+0

据我所知,你只能在Java 8+中做到这一点,其中允许注释通用参数 – Mibac

回答

4

您可以通过用nullability annotations that the Kotlin compiler understands中的一些注释Footype use来做到这一点。不幸的是,列表中的一些注释库不支持类型使用注释。

我发现@NotNullorg.jetbrains:annotations:15.0(而不是13.0)具有TYPE_USE目标,这样你就可以添加库作为依赖于你的项目和注释使用类型:

import org.jetbrains.annotations.NotNull; 

... 

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

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

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