Kotlin:如何在扩展名中调用具有相同名称的方法?

Chr*_*iss 1 extension-methods kotlin

我写了一个startsWith(substring)扩展,它也适用于可为空的字符串。不幸的是,我的实现导致StackOverflowError,导致扩展将自身称为自身而不是String.startsWith(..)方法。

private fun String?.startsWith(sub: String): Boolean = this?.startsWith(sub)==true
Run Code Online (Sandbox Code Playgroud)

可以打电话String.startsWith(..)吗?

zsm*_*b13 5

您可以使用以下import as语法以startsWith其他名称显式导入标准库的方法,然后可以使用该名称而不会发生冲突:

import kotlin.text.startsWith as ktStartsWith

private fun String?.startsWith(sub: String): Boolean = this?.ktStartsWith(sub) == true
Run Code Online (Sandbox Code Playgroud)