Это невозможно сделать с помощью функции в Kotlin или Java, поскольку ссылки могут передаваться только по значению. (Если вы не удовлетворены использованием класса-оболочки и не поменяете местами ссылки на два экземпляра-оболочки, но это будет неуклюже.)
Вероятно, это самый простой способ поменять значения двух переменных:
var x = 0
var y = 1
//swap:
x = y.also { y = x }
Редактировать: Немного исправления. Вы можете сделать это со свойствами, используя отражение. Это не сработает с локальными переменными.
fun <T> swap(first: KMutableProperty0<T>, second: KMutableProperty0<T>) {
first.set(second.get().also { second.set(first.get()) })
}
swap(::x, ::y)
По моему мнению, такого рода практики (удаленное изменение значений переменных), хотя и распространенные в C / C ++, следует избегать.