假设我要制作以下代码作为可重用组件:
fun <T> MutableList<T>.swap(index1: Int, index2: Int) {
val tmp = this[index1] // 'this' corresponds to the list
this[index1] = this[index2]
this[index2] = tmp
}
,我想按如下所示在应用程序中的任何地方使用它:
val l = mutableListOf(1, 2, 3)
l.swap(0, 2)
如果我错了,请纠正我,但是我相信函数扩展声明可以存在于类之外。因此,在Android应用中,该声明应放在何处?还是有关系吗?不论该扩展名在哪里声明,编译器都将只编译代码并使它在全局范围内可重用?还是必须使它成为类的一部分?
答案 0 :(得分:4)
您可以创建一些文件,例如ListExt.kt
到任何您想要的地方(例如,在软件包main_package_name/util/ListExt.kt
中),并将扩展功能放在此处,它将在整个项目中可用。因此,ListExt.kt
文件的内容可以是:
package main_package_name.util
fun <T> MutableList<T>.swap(index1: Int, index2: Int) {
val tmp = this[index1] // 'this' corresponds to the list
this[index1] = this[index2]
this[index2] = tmp
}
// other extension functions on the Lists
答案 1 :(得分:1)
它们可以在任何地方,但是在同一文件和/或包中具有特定类的扩展名似乎很有意义。例如,String的扩展名可以在StringExtensions.kt中,也可以选择在扩展包中。
答案 2 :(得分:0)
是的,扩展函数可以在任何需要的地方声明。
对于通用工具的功能(关于列表),我应该将它们放在/company/app/util/lists.kt
之类的地方。
答案 3 :(得分:0)
要使扩展成为全局扩展,您需要将其放在类之外
package com.extension.globalcontext
fun <T> MutableList<T>.swap(index1: Int, index2: Int)
要调用它们,您需要导入软件包
import com.extension.globalcontext
l.swap(0, 2)