Вы не можете сделать это в 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)
}
}
Таким образом, вы можете просто вызвать функцию либо с помощью идентификаторов, либоСтроки и похоже, что вы используете ту же функцию
UIBehavior.dialog(this, R.string.title, R.string.message)
UIBehavior.dialog(this, "title", "message")
Вы также можете использовать общий супертип Int
и 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
или String
этой функции.Это также не сильно отличается от использования Any
.