带有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