来自外部库的实用程序 class 的扩展方法
extension method for utility class from external library
我正在使用来自 apache commons
的 FilenameUtils
我在代码中有这样的动作
val customPath = FilenameUtils.getPath(source) +
DEFAULT_SEPARATOR + FilenameUtils.getBaseName(source)
val resultPath = FilenameUtils.separatorsToSystem(customPath)
我决定把它做成扩展方法。我把它移到了单独的 class.
object PluginExtensions {
fun FilenameUtils.normalizeFilePath(source: String) : String {
val customPath = FilenameUtils.getPath(source) +
DEFAULT_SEPARATOR + FilenameUtils.getBaseName(source)
return FilenameUtils.separatorsToSystem(customPath)
}
fun File(name: String) : File = File(name).apply {
createNewFile()
}
}
但是在我使用它的 class 中找不到那个新方法
有什么问题?
在使用此扩展方法之前,您必须导入它。
import PluginExtensions.normalizeFilePath
您的扩展函数仅为 PluginExtensions 对象定义。您需要导入此对象之外的任何地方才能使扩展可见。替代方法是在包级别定义扩展。这将使您的扩展对整个包可见。
查看扩展文档。具体来说 Scope of Extensions.
您需要将函数导入到调用它的文件中。扩展函数不在您要扩展的 class 中。它位于您定义它的地方。
在您使用函数的文件中写入:
import PluginExtensions.normalizeFilePath
我正在使用来自 apache commons
FilenameUtils
我在代码中有这样的动作
val customPath = FilenameUtils.getPath(source) +
DEFAULT_SEPARATOR + FilenameUtils.getBaseName(source)
val resultPath = FilenameUtils.separatorsToSystem(customPath)
我决定把它做成扩展方法。我把它移到了单独的 class.
object PluginExtensions {
fun FilenameUtils.normalizeFilePath(source: String) : String {
val customPath = FilenameUtils.getPath(source) +
DEFAULT_SEPARATOR + FilenameUtils.getBaseName(source)
return FilenameUtils.separatorsToSystem(customPath)
}
fun File(name: String) : File = File(name).apply {
createNewFile()
}
}
但是在我使用它的 class 中找不到那个新方法
有什么问题?
在使用此扩展方法之前,您必须导入它。
import PluginExtensions.normalizeFilePath
您的扩展函数仅为 PluginExtensions 对象定义。您需要导入此对象之外的任何地方才能使扩展可见。替代方法是在包级别定义扩展。这将使您的扩展对整个包可见。
查看扩展文档。具体来说 Scope of Extensions.
您需要将函数导入到调用它的文件中。扩展函数不在您要扩展的 class 中。它位于您定义它的地方。
在您使用函数的文件中写入:
import PluginExtensions.normalizeFilePath