如何通过扩展功能编写自己的

时间:2020-04-03 15:34:09

标签: android kotlin extension-function

我有一个像这样的默认功能:

fun <T> makeDefault(): Animal<T> = Animal<Nothing>(
    name = "",
    size = 0,
    age = 0
)

我看到有一个by运算符,可用于以下视图模型:

val model: MyViewModel by viewModels() 

问题::如何创建与我的makeDefault()相似的函数?

我想做什么:

val animal: Animal<Dog> by makeDefault()

1 个答案:

答案 0 :(得分:2)

您可以创建自己的 Delegate ,而不是扩展

void run()

然后使用它:

import kotlin.reflect.KProperty

class DefaultDelegate<T> {
    private var created: Animal<T> = Animal<Nothing>(
            name = "",
            size = 0,
            age = 0
        )

    operator fun getValue(thisRef: Any?, property: KProperty<*>): Animal<T> {
        return created
    }

    operator fun setValue(thisRef: Any?, property: KProperty<*>, value: Animal<T>) {
        created = value
    }
}

有关更多信息,请参见Delegated properties doc