gpt4 book ai didi

types - 如何在 Kotlin 中声明具有两种类型的变量,如 val x : Int or String

转载 作者:行者123 更新时间:2023-12-01 11:15:14 25 4
gpt4 key购买 nike

我要写一个类似的方法:

object UIBehavior {
fun dialog(context: Context, title: Int | String, message: Int | String){
val dialogObj = AlertDialog.Builder(context)
dialogObj.setTitle(title)
dialogObj.setMessage(message)
}
}

方法 dialogObj.setTitle 和 dialogObj.setMessage 允许两种类型的参数,我怎样才能删除可以让方法对话框只允许两种类型 Int 和 String 的参数?

最佳答案

你不能在 Kotlin 中做到这一点。

但是你可以有多个版本的函数,例如

object UIBehavior {
fun dialog(context: Context, titleId: Int, messageId: Int){
val titleString = context.getString(titleId)
val messageString = context.getString(messageId)
dialog(context, titleString, messageString)
}

fun dialog(context: Context, title: String, message: String) {
val dialogObj = AlertDialog.Builder(context)
dialogObj.setTitle(title)
dialogObj.setMessage(message)
}
}

这样,您可以简单地使用 id 或字符串调用该函数,看起来您正在使用相同的函数
UIBehavior.dialog(this, R.string.title, R.string.message)
UIBehavior.dialog(this, "title", "message")

您还可以使用 Int 的常见父类(super class)型和 String但这将允许更多,我不建议这样做。
fun dialog(context: Context, title: Any, messageId: Any){
val titleString = when (title) {
is String -> title
is Int -> context.getString(title)
else -> throw IllegalArgumentException("Unsupported type")
}
val messageString = when ...
...
dialog(context, titleString, messageString)
}

泛型在这里也不起作用,因为你不能调用 dialogObj.setTitle(title)动态的。必须在编译时知道是否要调用 IntString该功能的重载。它与使用 Any 也没有什么不同。 .

关于types - 如何在 Kotlin 中声明具有两种类型的变量,如 val x : Int or String,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52735045/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com