无法从java调用kotlin扩展函数

我知道kotlin扩展函数被编译为静态函数,使用fileName作为具有Kt后缀的类名称。 问题是我的单个字符串参数函数从Java代码调用时要求两个字符串参数。

扩展功能在KUtils文件中

fun String.extractDigits(strValue: String): String { val str = strValue.trim { it <= ' ' } var digits = "" var chrs: Char for (i in 0..str.length - 1) { chrs = str[i] if (Character.isDigit(chrs)) { digits += chrs } } return digits } 

调用java代码

 KUtilsKt.extractDigits("99PI_12345.jpg") 

编译时间错误消息:

错误:(206,42)错误:类KUtilsKt中的extractDigits方法不能应用于给定的类型;
必需:String,String
发现:字符串
理由:实际和正式的参数列表长度不同

请帮忙
谢谢

问题是接收实例被编码为参数。 所以:

 fun String.extractDigits(strValue: String): String {...} 

成为( javap输出):

 public static final java.lang.String extractDigits(java.lang.String, java.lang.String); 

但是你只传递一个参数给函数。

我不明白为什么你在这里使用扩展函数,我希望看到使用接收实例,而不是传递一个单独的值:

 fun String.extractDigits(): String { val str = this.trim { it <= ' ' } // Using `this`, ie the receiving instance var digits = "" var chrs: Char for (i in 0..str.length - 1) { chrs = str[i] if (Character.isDigit(chrs)) { digits += chrs } } return digits } 

然后,在Java中,你可以像你尝试的那样调用它,并在Kotlin中这样做:

 val str = "123blah4" println(str.extractDigits()) // prints 1234