Как назначить новое значение, если вы устанавливаете setter private в kotlin?

Я новичок в kotlin и не могу понять, как геттер и сеттер ведут себя в kotlin, поэтому, если я установил setter в личное. Тогда каков способ обновления значения.

package foo class Person() { var name: String = "defaultValue" private set } 

Если вы установили, что ваш сеттер является приватным, этот сеттер будет доступен только из его класса. Другими словами, вы можете использовать обычное назначение, даже если ваш сеттер является закрытым, но только внутри класса.

 class Person() { var name: String = "defaultValue" private set fun foo(bar: String) { name = bar // name can be set here } } fun main(args: Array<String>) { Person().name = "foo" // error. Name can be accessed but can not be modified here as its setter is private. } 

Для получения дополнительной информации ознакомьтесь с документацией о видимости Kotlin.

приведенный выше код kotlin будет преобразован в java-код компилятором kotlin, как показано ниже:

 package foo; public final class Person{ private String name = "defaultValue"; public final String getName(){ return name; } private final void setName(String name){ this.name=name; } } 

что означает, что вы можете изменить поле name в классе Person . Другая ситуация заключается в том, если вы хотите изменить свойство name с помощью частного установщика из класса Person . вместо этого вы можете использовать java-отражение, например:

 val person = Person(); val field = Person::name.javaField!!.apply { isAccessible = true } field.set(person, "bob") println(person.name)// "bob" val setter = Person::class.java.getDeclaredMethod("setName", String::class.java)!! .apply { isAccessible = true } setter.invoke(person, "john") println(person.name)// "john" 
Intereting Posts
Требует ли Kotlin рамки DI? Предупреждение Proguard: не может найти ссылочный класс в Observable Как определить собственные свойства для моделей на основе Йены? Строчная интерполяция для двойного числа в Котлине Как связать общие типы двух параметров функции Kotlin? Почему при создании этого проекта появляется ошибка «Нет дескрипторов сборки». Как получить все документы из коллекции Firestore в классе POJO? Создание класса Parcelable со вторичным конструктором, который принимает список как параметр в Kotlin Почему этот код Котлина все еще требует?. для доступа к членам? Gradle не будет импортировать зависимость bintray, но не вызывает никакой ошибки Как справляться с проблемой перегрузки неоднозначность функций с дженериками? Как мне выполнить «перерыв» или «продолжить», когда в функциональном цикле внутри Котлина? Переменная вида Kotlin неожиданно null в методе Activity onCreate Использование функции Kotlin как типа Java SAM Spring Boot 2.0.0.M7, Kotlin, Gradle – bean не удалось найти