首页 > 解决方案 > 带参数的 Kotlin 扩展

问题描述

在一个同时具有 Kotlin 和 java 的 Android 项目上,我想在一些 java 文件中substringBeforeLast(delimiter)使用Kotlin 函数。substringAfterLast(delimiter)

所以我想到了使用扩展。我做了以下工作,

fun String.getStringAfterLast(): String{
    return this.substringAfterLast(".")
}

但是我正在考虑将分隔符作为参数传递,但是在尝试在 java 中使用“删除第二个参数...”时它给了我一个错误

fun String.getStringBeforeLast(delimiter: String): String{
    return this.substringBeforeLast(delimiter)
}

方法正确吗?可以做到吗?

标签: javaandroidkotlin

解决方案


您解决此问题的方法是正确的,它应该可以工作。例如,使用这个 Kotlin 代码:

fun String.getStringBeforeLast(delimiter: String): String{
    return this.substringBeforeLast(delimiter)
}

您应该能够像这样从 Java 调用该函数:

ExtensionKt.getStringBeforeLast(str, ",");

如果它不起作用,那么我想一定有一些小错误,例如:您将delimiter参数添加到getStringBeforeLast()函数中,但错误地尝试getStringAfterLast()从 Java 调用函数。

此外,您始终可以直接从 Java 调用 Kotlin stdlib 的函数。请注意substringBeforeLast()/substringAfterLast()实际上接收一个额外的可选参数,您需要从 Java 中提供它,从而使代码更加冗长:

StringsKt.substringBeforeLast(str, ",", str);

推荐阅读