Kotlin abstract class with generic param and methods which use type param

后端 未结 4 1616
情书的邮戳
情书的邮戳 2021-01-11 13:15

I\'m trying to create an abstract class with generic parameter which will have subclasses which should call methods without having to specify type parameters

4条回答
  •  南方客
    南方客 (楼主)
    2021-01-11 14:09

    Thanks to Fabian Zeindly I wrote a variant for several extended classes. In this case all of them should be declared in a title of an abstract class.

    abstract class AbstractAdapter : RecyclerView.Adapter() {
    
        var list: List = emptyList()
    
        override fun getItemCount(): Int = list.size
    
        open fun setItems(list: List) {
            this.list = list.toMutableList()
        }
    
        open class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView)
    
        open class Item
    }
    

    Then extend the class with new inner classes (ViewHolder, Item).

    class NewAdapter(private var listener: View.OnClickListener?) : AbstractAdapter() {
    
        private var originalItems: List = emptyList()
    
        override fun setItems(list: List) {
            super.setItems(list)
            this.originalItems = list.toMutableList()
            this.list = list.toMutableList()
        }
    
        override fun onCreateViewHolder(viewGroup: ViewGroup, i: Int): ViewHolder {
            val view = LayoutInflater.from(viewGroup.context)
                .inflate(R.layout.layout, viewGroup, false)
    
            return ViewHolder(view)
        }
    
        override fun onBindViewHolder(viewHolder: ViewHolder, i: Int) {
            val item = list[i]
            viewHolder.textView.text = item.text
            viewHolder.textView.tag = item.id
        }
    
        class ViewHolder(itemView: View) : AbstractAdapter.ViewHolder(itemView) {
            val textView: TextView = itemView.name
        }
    
        class Item(val id: Int, val text: String) : AbstractAdapter.Item()
    }
    

提交回复
热议问题