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";
}
});
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";
}
});