extension-methods - 来自外部库的实用程序类的扩展方法

标签 extension-methods kotlin

我正在使用 apache commons 中的 FilenameUtils

我在代码中有这样的 Action

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

问题是什么?

最佳答案

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

import PluginExtensions.normalizeFilePath

您的扩展函数仅为 PluginExtensions 对象定义。您需要导入此对象之外的任何地方才能使扩展可见。替代方法是在包级别定义扩展。这将使您的扩展对整个包可见。

查看扩展文档。具体Scope of Extensions .

关于extension-methods - 来自外部库的实用程序类的扩展方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41460049/

相关文章:

android - 如何在IntelliJ IDEA中修复 “Render problem”和 “java.lang.NoClassDefFoundError: sun/misc/Cleaner”?

swift - Kotlin 等效于 Swift 字符串枚举(类型化的字符串常量集)

c# - 如何将通用扩展方法应用于第三方SDK中的多个不相关类型?

c# - 为什么不能直接调用扩展方法?

reflection - 将 List<Type> 转换为 List<Type B>

linq - IQueryable(非通用): missing Count and Skip ?与IQueryable <T>一起使用

kotlin - 在可组合函数之外更新状态。 (喷气背包组合)

java - 从 Java(和 Kotlin)隐藏 Kotlin 对象的实例字段

selenium - 如何添加Gradle Kotlin依赖编译组: 'org.seleniumhq.selenium' ?

c# - 最佳实践 : C# Extension methods namespace and promoting extension methods