Saya bekerja di aplikasi Android menggunakan Kotlin, tetapi ketika saya mencoba menggunakan kelas beton sebagai parameter keempat saya mendapatkan kesalahan, pertanyaan saya adalah, apa yang saya lakukan salah?

Ini adalah adaptor dasar dari RecyclerView

abstract class BaseAdapter<K, T: DbEntity<K>, VDB: ViewDataBinding, VH: BaseViewHolder<K,DbEntity<K>, VDB>>: RecyclerView.Adapter<VH>(){
    val items: MutableList<T> = ArrayList()

    fun addNewItems(newItems: List<T>){

    }
}

Ini adalah kelas yang saya gunakan untuk menentukan parameter generik dan saya mendapatkan kesalahan

class CaseByCountryViewHolder(mDataBinding: ItemCaseByCountryBinding): BaseViewHolder<Int, CaseByCountry, ItemCaseByCountryBinding>(mDataBinding) {

    override fun bind(item: CaseByCountry) {
    }
}

Ini adalah kelas Base ViewHolder:

abstract class BaseViewHolder<K, T: DbEntity<K>, VDB: ViewDataBinding>(mDataBinding: ViewDataBinding)
    :RecyclerView.ViewHolder(mDataBinding.root){
    protected val context: Context = mDataBinding.root.context
    protected val layoutInflater: LayoutInflater = LayoutInflater.from(context)
    abstract fun bind(item: T)
}

Dan akhirnya, ini adalah kesalahan yang saya dapatkan: Error android generics kotlin inheritance

1
Mijael Viricochea 20 Maret 2020, 00:30

1 menjawab

Jawaban Terbaik

Itu hanya kesalahan lewat argumen.

abstract class BaseAdapter<K, t : A<K>, 
VDB: ViewDataBinding, VH: BaseViewHolder<K,t, VDB>>{ }

class CaseByCountryAdapter() 
: BaseAdapter<Int, CaseByCountry, ViewDataBinding, CaseByCountryViewHolder>()

abstract class BaseViewHolder<K, t : A<K>, VDB: ViewDataBinding> {}

class CaseByCountryViewHolder(mDataBinding: ItemCaseByCountryBinding)
: BaseViewHolder<Int, CaseByCountry, ViewDataBinding>() {}
1
Akshay Nandwana 21 Maret 2020, 01:28