В Kotlin я хочу добавить методы расширения в класс, например, в класс Entity
. Но я хочу видеть эти расширения, когда Entity
находится внутри транзакции, иначе скрыта. Например, если я определяю эти классы и расширения:
interface Entity {}
fun Entity.save() {}
fun Entity.delete() {}
class Transaction {
fun start() {}
fun commit() {}
fun rollback() {}
}
Теперь я могу случайно вызвать save()
и delete()
в любое время, но я хочу, чтобы они были доступны только после start()
транзакции и больше не после commit()
или rollback()
? В настоящее время я могу это сделать, что неверно:
someEntity.save() // DO NOT WANT TO ALLOW HERE
val tx = Transaction()
tx.start()
someEntity.save() // YES, ALLOW
tx.commit()
someEntity.delete() // DO NOT WANT TO ALLOW HERE
Как заставить их отображаться и исчезать в правильном контексте?
Примечание: этот вопрос намеренно написан автором и автору (Автоответчик), так что идиоматические ответы обычно спросили темы Котлина в SO. Также прояснить некоторые действительно старые ответы, написанные для альфов Котлина, которые не точны для сегодняшнего дня Котлин. Другие ответы также приветствуются, есть много стилей, как ответить на это!