Как импортировать функцию расширения типа в Котлин - PullRequest
0 голосов
/ 06 июля 2018

Я написал функцию расширения для типа 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")
}

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

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

1 Ответ

0 голосов
/ 06 июля 2018

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

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

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

...