当前位置: 首页 > 知识库问答 >
问题:

带参数的Kotlin扩展

冯皓
2023-03-14

在一个同时使用静态编程语言和java的Android项目中,我想在一些java文件中使用静态编程语言函数substringBeforeLast(分隔符)substringAfterLast(分隔符)

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

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

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

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

方法正确吗?能做到吗?

共有1个答案

陆臻
2023-03-14

你解决这个问题的方法是正确的,应该是可行的。例如,使用此Kotlin代码:

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

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

ExtensionKt.getStringBeforeLast(str, ",");

如果它不起作用,那么我猜一定是有一些小错误,例如:您在getStringBeforeLast()函数中添加了delimiterparam,但错误地试图从Java调用getStringAfterLast()函数。

此外,您总是可以直接从Java调用静态编程语言stdlib的函数。请注意,substringBeforeLast()/substringAfterLast()实际上接收到一个额外的可选参数,您需要从Java提供它,使代码更加冗长:

StringsKt.substringBeforeLast(str, ",", str);
 类似资料:
  • 我正试图将一个Android应用程序从Java转换为Kotlin。应用程序中有几个单人。我为没有构造函数参数的单例使用了一个伴生对象。还有另一个接受构造函数参数的单例。 Java代码:

  • 我有以下代码: 我不希望字段ui有一个getter,但是kotlin在默认情况下会生成它,因为它是构造函数中定义的val。 在properties and fields文档中,我发现我可以用以下代码生成一个私有getter 但我在构造函数定义中找不到这样做的方法

  • 我想为实现接口的类中的函数参数使用默认值,如下所示: 现在这里是编译的,这里是不编译的: KO:不允许重写函数为其参数指定默认值 KO:类“LocalFileStoreService”不是抽象的,并且没有实现抽象成员公共抽象存储文件(路径:String,负载:InputStream,类型:MediaType):fqn中定义的单元。。。文件存储服务 好 啊: 这是预期的行为吗?有没有更好的方法来管理

  • 数据类似乎是Java中老式POJO的替代品。这些类将允许继承是可以预期的,但我看不到扩展数据类的方便方法。我需要的是这样的东西:

  • 主要内容:扩展函数,扩展函数是静态解析的,伴生对象的扩展,扩展的作用域,扩展声明为成员Kotlin 可以对一个类的属性和方法进行扩展,且不需要继承或使用 Decorator 模式。 扩展是一种静态行为,对被扩展的类代码本身不会造成任何影响。 扩展函数 扩展函数可以在已有类中添加新的方法,不会对原类做修改,扩展函数定义形式: receiverType:表示函数的接收者,也就是函数扩展的对象 functionName:扩展函数的名称 params:扩展函数的参数,可以为NULL 以下实

  • Kotlin 可以对一个类的属性和方法进行扩展,且不需要继承或使用 Decorator 模式。 扩展是一种静态行为,对被扩展的类代码本身不会造成任何影响。 扩展函数 扩展函数可以在已有类中添加新的方法,不会对原类做修改,扩展函数定义形式: fun receiverType.functionName(params){ body } receiverType:表示函数的接收者,也就是函数扩