Kotlin中如何声明ByteArray转String的toString方法避免被Any类方法覆盖
解决方案
Kotlin 中存在固定规则:类的成员方法优先级永远高于同名同参数的扩展方法,所以你声明的ByteArray.toString()扩展不可能覆盖Any类内置的toString()成员方法,只能通过调整写法避开冲突,常见解决方案如下:
- 方案1:修改扩展方法命名,最推荐的方案,既保留扩展方法的调用便捷性,语义也更清晰。可以直接命名为和转换规则匹配的名称,比如按UTF-8编码转字符串可以命名为
toUtf8String(),示例代码:
// 支持自定义编码,默认使用UTF-8 fun ByteArray.toUtf8String(charset: Charset = Charsets.UTF_8): String { return String(this, charset) }
调用时直接使用byteArray.toUtf8String()即可,不会和内置方法冲突。另外Kotlin 1.4及以上版本标准库已经提供了内置的ByteArray.decodeToString()扩展方法,默认按UTF-8编码转换,不需要自己重复实现,可直接调用。
- 方案2:改用顶层工具函数,写法和你在Java中用的静态工具方法完全一致,不需要和成员方法抢命名:
fun byteArrayToString(byteArray: ByteArray, charset: Charset = Charsets.UTF_8): String { return String(byteArray, charset) }
调用时直接传入字节数组参数即可:byteArrayToString(byteArray)
内容的提问来源于stack exchange,提问作者FredSuvn
相关产品推荐
相关产品推荐

