【问题标题】:Hashmap with ArrayList data type (Kotlin)?具有 ArrayList 数据类型的哈希图(Kotlin)?
【发布时间】:2017-11-08 03:30:06
【问题描述】:

这是我使用的变量和addControl的乐趣。

var arrayTQ = ArrayList<TongQuan>()
var arrayBG = ArrayList<BangGia>()
var epdbLV: ExpandableListView? = null
var listHeader: List<String> = listOf()
var listChild = HashMap<String, ArrayList<Any>>()

var arrayListData = ArrayList<String>()
private fun addControl() {
    epdbLV = findViewById(R.id.epdbList)
    listHeader = ArrayList()
    listChild = HashMap<String, ArrayList<Any>>()
    listHeader = listOf("Tổng Quan Thị Quan Thị Trường, Bảng Giá, Lịch Sự Kiện, Tin Tức, Chỉ Số Thế Giới")
    arrayListData = ArrayList()
    arrayTQ = ArrayList()
    arrayBG = ArrayList()
}

并且我将listChild.put 放入内部类GetData 扩展AsyncTask 中的override fun。 arrayTQ的错误是关于TongQuan与Any不匹配的数据类型。在Java中,不需要在HashMap中的ArrayList后面加上typedata。帮我解决它,我已经搜索并尝试过。谢谢各位。

override fun onPostExecute(result: ArrayList<String>) {
        super.onPostExecute(result)
        getDataTQ()
        getDataBG()
        listChild.clear()
        listChild.put(listHeader.get(1), arrayTQ)
    }

【问题讨论】:

    标签: android kotlin


    【解决方案1】:

    ArrayList&lt;TongQuan&gt; 不是ArrayList&lt;Any&gt; 的子级。

    所以不要这样:listChild = HashMap&lt;String, ArrayList&lt;Any&gt;&gt;()

    你应该有:listChild = HashMap&lt;String, ArrayList&lt;TongQuan&gt;&gt;()


    但是,这将只允许您添加 ArrayList&lt;TongQuan&gt;。如果您希望能够添加ArrayList&lt;TongQuan&gt;ArrayList&lt;BangGia&gt;,则需要执行以下操作:

    listChild = HashMap&lt;String, ArrayList&lt;out Any&gt;&gt;()

    有关 Variance 的详细文档,请参阅此处:https://kotlinlang.org/docs/reference/generics.html

    【讨论】:

      【解决方案2】:

      Any 与 Java 中的 Object 不同。与 Java 中每个类都是 Object 的子级不同,在 kotlin 中并非每个类都是 Any 的子级。

      您应该使用 kotlin List,而不是使用 ArrayList。 它应该像这样工作:

      ar arrayTQ = mutableListOf<TongQuan>()
      var arrayBG = mutableListOf<BangGia>()
      var epdbLV: ExpandableListView? = null
      var listHeader: List<String> = listOf()
      var listChild = HashMap<String, List<Any>>()
      
      var arrayListData = mutableListOf<String>()
      private fun addControl() {
          epdbLV = findViewById(R.id.epdbList)
          listHeader = ArrayList()
          listChild = HashMap<String, List<Any>>()
          listHeader = listOf("Tổng Quan Thị Quan Thị Trường, Bảng Giá, Lịch Sự Kiện, Tin Tức, Chỉ Số Thế Giới")
          arrayListData.clear()
          arrayTQ.clear()
          arrayBG.clear()
      }
      

      打电话应该是安全的

      override fun onPostExecute(result: ArrayList<String>) {
              super.onPostExecute(result)
              getDataTQ()
              getDataBG()
              listChild.clear()
              listChild.put(listHeader.get(1), arrayTQ)
          }
      

      正如@Henry 建议的那样,您应该阅读 kotlin Variance https://kotlinlang.org/docs/reference/generics.html

      【讨论】:

      • 谢谢你们!两者都正常工作。我正在阅读,正在学习。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-14
      • 1970-01-01
      • 1970-01-01
      • 2013-09-12
      • 2021-01-19
      • 1970-01-01
      • 2014-12-28
      相关资源
      最近更新 更多