我有一个转换ByteArray?为base64 的方法,String?因此,如果null输出了参数,也会这样null。这是它的实现:
fun toBase64String(array: ByteArray?): String? = if(array == null) null else
Base64.getEncoder().encodeToString(array)
Run Code Online (Sandbox Code Playgroud)
但是当我传入不为null的ByteArray方法时String?,会返回预期的结果。有没有一种使它通用的方法,这样的用例将是可能的:
val base64 = toBase64String(ByteArray(4))
Run Code Online (Sandbox Code Playgroud)
哪里base64是类型,String而不是String?因为参数不可为空?
我刚刚开始与Kotlin一起工作,可能不知道使它成为可能的语言功能。
您可以进行两个重载,一个重载可为空ByteArray?,一个重载为非空ByteArray:
fun toBase64String(array: ByteArray): String =
Base64.getEncoder().encodeToString(array)
@JvmName("toBase64StringNullable")
fun toBase64String(array: ByteArray?): String? =
if (array == null) null else toBase64String(array)
Run Code Online (Sandbox Code Playgroud)
我们需要@JvmName("...")避免字节码中的声明冲突。而且,这允许区分Java中的功能。
用法:
val nonNullBytes: ByteArray = TODO()
val nonNullString = toBase64String(nonNullBytes) // the inferred type is String
val nullableBytes: ByteArray? = TODO()
val nullableString = toBase64String(nullableBytes) // the inferred type is String?
Run Code Online (Sandbox Code Playgroud)
当参数为非null类型时ByteArray,编译器将选择返回非null的重载String。
| 归档时间: |
|
| 查看次数: |
412 次 |
| 最近记录: |