Почему я не могу использовать тип Class в качестве универсального c параметра в Kotlin? - PullRequest
1 голос
/ 20 марта 2020

Я работаю в приложении Android, использующем Kotlin, но когда я пытаюсь использовать конкретный класс в качестве четвертого параметра, у меня появляется ошибка, мой вопрос: что я делаю неправильно?

Это базовый адаптер 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>){

    }
}

Это класс, который я использую для указания параметра generi c, и я получаю ошибку

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

    override fun bind(item: CaseByCountry) {
    }
}

Это Базовый класс 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)
}

И, наконец, я получаю ошибку: Error

Не могли бы вы мне помочь, пожалуйста? Я не знаю, что я делаю не так, заранее спасибо.

1 Ответ

1 голос
/ 21 марта 2020

Это была просто ошибка передачи аргумента.

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>() {}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...