我想要2个类似的功能:
fun f1(String key, value: JsonNullable<ByteArray?>): Modification? {
return if (value.isPresent) {
when (val rawValue = value.get()) {
null -> delete(key)
else -> bar(field, rawValue)
}
} else {
null
}
}
==============
fun f2(String key, value: JsonNullable<String?>): Modification? {
return if (value.isPresent) {
when (val rawValue = value.get()) {
null -> delete(key)
else -> bar(field, rawValue)
}
} else {
null
}
}
有没有办法使用泛型将其替换为单个函数?
bar 函数重载:
fun bar(field: String, value: JsonNullable<ByteArray?>)...
fun bar(field: String, value: JsonNullable<String?>)...
我认为您的想法是错误的,String 不是从 ByteArray 继承的(反之亦然),并且它们不从除 Object 之外的任何基类继承。
上限 最常见的约束类型是上限,它对应于 Java 的 extends 关键字:
因此,除非您只想将其扩展为对象(字符串和 ByteArray 都扩展对象),否则您将需要使用泛型。
我想这个例子会让你有一个基本的了解
基本上,您使用泛型,然后使用 if 或 switch 语句来执行每种类型特定的操作。
在使用对象上限的情况下,它将是 这些
因此,如果这不能回答您的问题,您可能应该重新措辞,使其更准确地说明您正在寻找的内容。
公平警告...Java/Scala 开发人员很少使用 Kotlin,因此有些内容可能过于冗长