首页 文章

带有ArrayList数据类型的Hashmap(Kotlin)?

提问于
浏览
1

这是我使用的变量和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的覆盖乐趣中 . 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)
    }

2 回答

  • 1

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

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

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


    但是,这将允许您只添加 ArrayList<TongQuan> . 如果您想要添加 ArrayList<TongQuan>ArrayList<BangGia> ,则需要执行以下操作:

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

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

  • 0

    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

相关问题