Intereting Posts
Порядок настройки Планировщики в Rx Ошибка при попытке ввести ViewModelProvider в действие с помощью Dagger2 и Kotlin Неразрешенный справочник DaggerApplicationComponent Почему @Primary иногда не работает для классов Kotlin? Kotlin mutableMap foreach Объявление пользовательской «чистой» задачи при использовании стандартных плагинов жизненного цикла Gradle запрещено Имеет ли a.run то же, что и? .run в kotlin SparkJava не может работать вместе с некоторыми API-интерфейсами Google Youtube Невозможно установить видимость в группе ограничений RxJava2 как отделить различную реализацию наблюдаемого излучателя Извлечь текстовое значение из объекта, чтобы установить текст в listView Параметр функции Kotlin: Val не может быть переназначен Android Kotlin создает реализацию класса Parcelable дает ошибку в «переопределении» метода writeToParcel Метод обмотки React-Kotlin setState Предоставляет ли Kotlin какие-либо реализации своих интерфейсов сбора данных?

Передача параметров пользовательскому получателю в котлин

Я читал о свойствах в Котлине, включая пользовательские геттеры и сеттеры.

Тем не менее, мне было интересно, можно ли создать пользовательский getter с дополнительными параметрами.

Например, рассмотрим следующий метод в Java:

public String getDisplayedValue(Context context) { if (PrefUtils.useImperialUnits(context)) { // return stuff } else { // return other stuff } } 

Обратите внимание, что статический метод в PrefUtils должен иметь параметр Context в качестве параметра, поэтому удаление этого параметра не является вариантом.

Я хотел бы написать это так в Котлине:

 val displayedValue: String get(context: Context) { return if (PrefUtils.useImperialUnits(context)) { // stuff } else { // other stuff } } 

Но моя IDE выделяет все это красным цветом.

Я знаю, что могу создать функцию в своем классе, чтобы получить отображаемое значение, но это означало бы, что мне придется использовать .getDisplayedValue(Context) в Kotlin, а не вместо того, чтобы ссылаться на свойство по имени, как на .displayedValue ,

Есть ли способ создать пользовательский геттер, как это?

EDIT: Если нет, было бы лучше написать функцию для этого или передать Context в параметры конструктора класса?

Насколько я знаю, свойство getter не может иметь параметр. Вместо этого напишите функцию.

Вы можете сделать, например:

 val displayedValue: String by lazy { val newString = context.getString(R.string.someString) newString }