带有ArrayList数据类型的哈希表(Kotlin)?

这是我使用的变量和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 extends AsyncTask中重写fun。 arrayTQ的错误是关于TongQuan与Any不匹配的类型。 在Java中,不需要在HashMap中的ArrayList之后添加类型数据。 帮我修理一下,我搜索了一下,试了一下。 多谢你们。

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

ArrayList<TongQuan>不是ArrayList<Any>的子ArrayList<TongQuan>

所以不是这样的: listChild = HashMap<String, ArrayList<Any>>()

你应该有: listChild = HashMap<String, ArrayList<TongQuan>>()


不过,这会让你只添加ArrayList<TongQuan> 。 如果你想添加ArrayList<TongQuan>ArrayList<BangGia> ,那么你需要做到以下ArrayList<BangGia>

listChild = HashMap<String, ArrayList<out Any>>()

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

Any与Java中的Object都不一样。 不同于每个类都是Object的子类的java,在kotlin中并不是每个类都是Any子类。

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

 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) } 

作为@亨利建议,你应该阅读kotlin 差异 https://kotlinlang.org/docs/reference/generics.html