Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何编写自己的扩展函数_Android_Kotlin_Extension Function - Fatal编程技术网

Android 如何编写自己的扩展函数

Android 如何编写自己的扩展函数,android,kotlin,extension-function,Android,Kotlin,Extension Function,我有这样一个默认函数: fun <T> makeDefault(): Animal<T> = Animal<Nothing>( name = "", size = 0, age = 0 ) 问题:如何为我的makeDefault()创建这样的函数 我想做的是: val animal: Animal<Dog> by makeDefault() val-animal:animal-by-makeDefault() 您可以创建

我有这样一个默认函数:

fun <T> makeDefault(): Animal<T> = Animal<Nothing>(
    name = "",
    size = 0,
    age = 0
)
问题:如何为我的
makeDefault()
创建这样的函数

我想做的是:

val animal: Animal<Dog> by makeDefault()
val-animal:animal-by-makeDefault()
您可以创建自己的代理,而不是扩展名:

导入kotlin.reflect.KProperty
类DefaultDelegate{
创建的私有变量:Animal=Animal(
name=“”,
大小=0,
年龄=0
)
运算符fun getValue(thisRef:Any?,属性:KProperty):动物{
创建的返回
}
运算符fun setValue(thisRef:Any?,属性:KProperty,值:Animal){
创造=价值
}
}
然后使用它:

val animal: Animal<Dog> by DefaultDelegate()
val animal:animal by DefaultDelegate()
有关更多信息,请参见

您可以创建自己的代理,而不是扩展名:

导入kotlin.reflect.KProperty
类DefaultDelegate{
创建的私有变量:Animal=Animal(
name=“”,
大小=0,
年龄=0
)
运算符fun getValue(thisRef:Any?,属性:KProperty):动物{
创建的返回
}
运算符fun setValue(thisRef:Any?,属性:KProperty,值:Animal){
创造=价值
}
}
然后使用它:

val animal: Animal<Dog> by DefaultDelegate()
val animal:animal by DefaultDelegate()

有关更多信息,请参见

应该注意的是,由于所有这些操作都是返回一个常量实例,因此代理只是引入了额外的开销,没有任何好处。感谢您的回答,并感谢@Tenfour04提供的有用评论。应该注意的是,由于所有这些操作都是返回一个常量实例,一位代表只是为了没有好处而引入额外的开销。感谢您的回答,并感谢@Tenfour04提供的有用评论
val animal: Animal<Dog> by DefaultDelegate()