Как импортировать функцию расширения типа в Kotlin

Я написал функцию расширения для типа Any, которая будет получать значение свойства объекта по его имени. Я хочу иметь возможность использовать его везде в моем проекте. Вот моя функция расширения:

package com.example.core.utils.validation

import java.util.NoSuchElementException
import kotlin.reflect.full.memberProperties

fun Any.getFieldValue(fieldName: String): Any? {
    try {
        return this.javaClass.kotlin.memberProperties.first { it.name == fieldName }.get(this)
    } catch (e: NoSuchElementException) {
        throw NoSuchFieldException(fieldName)
    }
}

Теперь я хочу использовать его так

package com.example.core

import com.example.core.utils.validation.*

class App {
    val obj = object {
        val field = "value"
    }

    val fieldValue = obj.getFieldValue("field")
}

Но есть неразрешенная ошибка ссылки

Как мне сделать мою функцию расширения глобальной и импортировать ее куда угодно?


person mustafo    schedule 06.07.2018    source источник
comment
Похоже, это должно сработать для меня... Оба в одном проекте?   -  person Alexey Romanov    schedule 06.07.2018


Ответы (1)


Вы должны использовать оператор import вместо второго объявления package во втором фрагменте кода.

См. документацию: https://kotlinlang.org/docs/reference/extensions.html#scope-of-extensions

И на самом деле я не уверен, что действительно делать расширение для любого типа. Я думаю, в таком случае вам нужно вызвать его для объекта типа Any.

person redlabrat    schedule 06.07.2018
comment
извините, это была ошибка в сообщении, а не в моем коде. Спасибо - person mustafo; 06.07.2018
comment
И на самом деле я не уверен, что действительно делать расширение для любого типа. Да, это так. - person Alexey Romanov; 06.07.2018
comment
Пример: import okhttp3.MediaType.Companion.toMediaType - person lcapra; 07.02.2020