在 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)
}
}
这样你就可以简单地使用 ids 或字符串调用该函数,看起来你正在使用相同的函数
UIBehavior.dialog(this, R.string.title, R.string.message)
UIBehavior.dialog(this, "title", "message")
您还可以使用常见的超类型Int
and 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)
动态地。必须在编译时知道是否要调用Int
or the String
该函数的重载。这与使用也没有什么不同Any
.