外部库中实用程序类的扩展方法

时间:2017-01-04 09:14:40

标签: extension-methods kotlin

我正在使用FilenameUtils

中的apache commons

我在代码中有这样的动作

val customPath = FilenameUtils.getPath(source) +
        DEFAULT_SEPARATOR + FilenameUtils.getBaseName(source)
val resultPath = FilenameUtils.separatorsToSystem(customPath)

我决定将其纳入扩展方法。我将它移到了单独的班级。

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()
    }
}

然而,它无法在我使用它的类中找到新方法

enter image description here

有什么问题?

2 个答案:

答案 0 :(得分:3)

在使用此扩展方法之前,您必须将其导入。

import PluginExtensions.normalizeFilePath

您的扩展功能仅针对PluginExtensions对象定义。在此对象之外的任何位置,您需要导入以使扩展可见。替代方案是在包级别定义扩展。这将使您的扩展可见整个包。

查看扩展文档。具体来说是Scope of Extensions

答案 1 :(得分:2)

您需要将该函数导入到您调用它的文件中。扩展功能不在您要扩展的类中。它位于您定义它的位置。

将此内容写入您正在使用该函数的文件中:

import PluginExtensions.normalizeFilePath