В настоящее время я пишу класс KOTLIN, где я хотел бы использовать возможности DSL, но быть обратно совместимым для разработчиков JAVA. При использовании var
компилятор автоматически создает геттер и сеттер для JAVA, но их нельзя использовать в стиле 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
, но это возможно. есть аннотация для того, чтобы скрыть свойство publi c для JAVA полностью и необязательно, конечно, наоборот?