【发布时间】:2020-06-19 15:08:45
【问题描述】:
我目前正在编写一个 KOTLIN 类,如果我喜欢使用 DSL 的可能性,但要向后兼容 JAVA 开发人员。使用 var 时,编译器会自动为 JAVA 创建 getter 和 setter,但不能使用 Builder 样式,因为它们没有返回 this。
所以基本上我喜欢做的事情是这样的:
class MyClass {
// for use in KOTLIN only DSL style e.g. MyClass() { offset = 1 }
var offset: Int? = null
// for use in JAVA only BUILDER style e.g. new MyClass().withOffset(1)
fun withOffset(value: Int) = apply { offset = value }
}
我喜欢在 Kotlin 中使用,但不想访问 withOffset 乐趣:
val myClass = MyClass() { offset = 1 }
我喜欢在JAVA中使用,但不想访问自动创建的setOffset和getOffset:
MyClass myClass = new MyClass().withOffset(1)
已经可以通过@JvmName 注解重命名getter 和setter,但是是否有一个注解可以完全隐藏JAVA 的公共属性,当然反之亦然?
【问题讨论】:
标签: java kotlin annotations backwards-compatibility