我有一个用 GET 参数组装 URL 的函数,它采用类型的参数名称和当前调用的String类型的参数值if not 。Any?toString()null
我希望它仅适用于可以有意义地放入 URL 中的类型(数字、字符串和布尔值),并防止人们使用任何其他对象类型调用它。
这在 Kotlin 中可能吗?
用例是,我在调用此函数时往往会忘记将单位转换为数字,并最终得到param=Angle(30,DEGREES)我真正想要的结果param=30。
如果它只是一个函数,您可以使用重载:
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 功能。