У меня такое чувство, что это может быть проблемой XY, потому что в вашем коде происходит так много необычных вещей. Почему реализация изменения значения свойства посредством отражения должна быть в редактируемом классе?
Полагаю, если есть какая-то причина, по которой вам нужно иметь возможность передавать эти параметры для редактирования, вам понадобится класс, но тогда имеет смысл для него реализовать функцию для ее самостоятельного использования:
class RemoteEdit<T, R>(var attributeToEdit: KMutableProperty1<T, R>, var newValue: R) {
fun execute(item: T) {
attributeToEdit.set(item, newValue)
}
}
val bananas = Thing(amount = 12, id = 21)
val edit23 = RemoteEdit(Thing::amount, 23)
edit23.execute(bananas)
Если вам не нужно передавать их, все, что вам нужно, это функция верхнего уровня:
fun <T, R> editProperty(item: T, attributeToEdit: KMutableProperty1<T, R>, newValue: R) =
attributeToEdit.set(item, newValue)
val bananas = Thing(amount = 12, id = 21)
editProperty(bananas, Thing::amount, 23)