在一个同时使用静态编程语言和java的Android项目中,我想在一些java文件中使用静态编程语言函数substringBeforeLast(分隔符)
和substringAfterLast(分隔符)
。
所以我想到了使用扩展。我做了下面的工作,
fun String.getStringAfterLast(): String{
return this.substringAfterLast(".")
}
然而,我曾考虑将分隔符作为参数传递,但在java中尝试使用“删除第二个参数…”时,它给了我一个错误
fun String.getStringBeforeLast(delimiter: String): String{
return this.substringBeforeLast(delimiter)
}
方法正确吗?能做到吗?
你解决这个问题的方法是正确的,应该是可行的。例如,使用此Kotlin代码:
fun String.getStringBeforeLast(delimiter: String): String{
return this.substringBeforeLast(delimiter)
}
您应该能够像这样从Java调用函数:
ExtensionKt.getStringBeforeLast(str, ",");
如果它不起作用,那么我猜一定是有一些小错误,例如:您在getStringBeforeLast()
函数中添加了delimiter
param,但错误地试图从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:表示函数的接收者,也就是函数扩