我可以限制仅使用原始类型和字符串调用泛型函数吗?

Fel*_*bek 5 generics kotlin

我有一个用 GET 参数组装 URL 的函数,它采用类型的参数名称和当前调用的String类型的参数值if not 。Any?toString()null

我希望它仅适用于可以有意义地放入 URL 中的类型(数字、字符串和布尔值),并防止人们使用任何其他对象类型调用它。

这在 Kotlin 中可能吗?

用例是,我在调用此函数时往往会忘记将单位转换为数字,并最终得到param=Angle(30,DEGREES)我真正想要的结果param=30

dan*_*1st 5

如果它只是一个函数,您可以使用重载:

private fun yourFunction(param: Any?){
    //your code
}

fun yourFunction(param: String?) = yourFunction(param as? Any?)
fun yourFunction(param: Int?) = yourFunction(param as? Any?)
fun yourFunction(param: Boolean?) = yourFunction(param as? Any?)
//the same for other types
Run Code Online (Sandbox Code Playgroud)

首先,Any?像您已经做的那样创建您的函数,但将其设为私有。

对于每个允许的类型,添加该类型的重载。该重载只是调用Any?-overload。

如果联合类型在未来的 Kotlin 版本中可用,您可以使用问题评论中提到的 @ Tenfour04,但联合类型在撰写本文时还不是 Kotlin 功能。