Kotlin 泛型到 java 没有通配符

Kotlin generics to java without wildcards

Kotlin 示例 class:

class Example {
    private lateinit var creator: (Unit) -> String
}

java 等价于

class Example {
    Function1<? super Unit, ? super String> creator
}

如何注释字段创建者以避免使用通配符?

您可以使用 @JvmSuppressWildcards:

删除通配符
lateinit var creator: (@JvmSuppressWildcards Unit) -> @JvmSuppressWildcards String

顺便说一下,您的代码不会生成通配符,因此以下代码在没有任何注释的情况下完全有效:

new Example().setCreator(new Function1<Unit, String>() {
     @Override
     public String invoke(Unit unit) {
         return "Test";
     }
});