【问题标题】:How to cast kotlin.list (ArrayList) to java.util.list (ArrayList)如何将 kotlin.list (ArrayList) 转换为 java.util.list (ArrayList)
【发布时间】:2022-01-19 09:49:52
【问题描述】:

我需要在 Android Bundle 中添加一个 kotlin.collections.ArrayList 并需要 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 传递给另一个片段吗?

【问题讨论】:

    标签: android kotlin casting


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

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

        如果明确需要它是一个数组列表而不是一个通用列表,一个更好的方法可能是:

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

        【讨论】:

        • 这与 FileUtils 无关 - 请仔细阅读问题!
        猜你喜欢
        • 1970-01-01
        • 2021-02-21
        • 1970-01-01
        • 2019-03-15
        • 1970-01-01
        • 1970-01-01
        • 2012-08-31
        • 2014-05-15
        • 1970-01-01
        相关资源
        最近更新 更多