Kotlin中将String[]经Any类型转换为ArrayList<String>的实现问题
问题原因
你写的arrayOf(anyObject)是将整个Any类型的数组对象作为新数组的唯一元素存入,后续调用map遍历的时候实际只处理了1个元素(就是原数组对象本身),调用toString()自然会输出数组的内存地址哈希值,无法得到预期的字符串列表。
正确实现方案
方案1:确定类型匹配时的强转实现
如果你可以确定传入的anyObject一定是String[]类型,不存在类型不匹配的场景,可以直接用强制类型转换后转ArrayList:
val result: ArrayList<String> = (anyObject as Array<String>).toCollection(ArrayList())
方案2:安全转换避免崩溃
如果无法保证类型一定匹配,可以用安全转换操作符,类型不匹配时返回默认的空列表(也可以自定义默认值):
val result: ArrayList<String> = (anyObject as? Array<String>)?.toCollection(ArrayList()) ?: arrayListOf()
补充说明
如果传入的anyObject是Java侧的String[]类型,上述代码依然可以正常兼容运行,Kotlin的数组类型和Java数组类型是互通的。
内容的提问来源于stack exchange,提问作者Bitwise DEVS
相关产品推荐
相关产品推荐

