如何将kotlin.list(ArrayList)强制转换为java.util.list(ArrayList)



我需要将一个kotlin.collections.ArrayList放入Android捆绑包中,并请求java.util.ArrayList

注意:我无法打包/序列化

如果我能Parcelize,我会做一些类似的事情

val transactionList: kotlin.collections.ArrayList<Object> = arrayListOf()
val bundle = Bundle() // Require java.util.ArrayList
bundle.putParcelableArrayList("transactions", transactionList as ArrayList<out Parcelable>)

有没有其他方法可以将List传递给另一个片段?

一个选项是将列表保存在两个片段共享的ViewModel中。

您可以从任何Collection 轻松创建新的ArrayList

val transactionList: kotlin.collections.ArrayList<Object> = arrayListOf()
val arrayList:java.util.ArrayList = ArrayList(transactionList)
val bundle = Bundle() 
bundle.putParcelableArrayList("transactions", arrayList)

ArrayList是一个具有实现细节的类。FileUtils正在返回LinkedList,这就是您遇到问题的原因。您应该改为强制转换为List,因为它是ArrayList和LinkedList都实现的接口。

如果您需要修改返回的列表,您可以使用MutableList,而不是不可变的列表。

但这不是最好的方法,因为如果FileUtils的创建者稍后更改其集合的实现细节,您的代码可能会开始崩溃。

如果明确需要它是一个arrayList而不是一个泛型列表,那么一个更好的灵魂可以是:

val myFiles = FileUtils.listFiles(mediaStorageDir, extensions, true)
val array = arrayListOf<File>()
array.addAll(myFiles)

最新更新