Как создать объект универсального типа в классе
У меня есть следующий класс
open abstract class NexusAdapter<TData: NexusIdProvider, TViewHolder: NexusViewHolder<TData>>
(protected val ctx: Context, private val _layoutId: Int, protected val items: List<TData>):
BaseAdapter() {
override fun getView(position: Int, view: View?, parent: ViewGroup?): View {
val itemView = if (view == null)
LayoutInflater.from(ctx).inflate(_layoutId, parent, false)
else view!!
// How do I create the object of type TViewHolder at runtime????
var viewHolder: TViewHolder = TViewHolder::class.java.newInstance()
viewHolder.bind(itemView , getItem(position))
return itemView
}
//...
}
Как мне создать объект типа TViewHolder
в моем классе.
1 ответ
Ты не сможешь это сделать. Вы должны предоставить фабричный метод для этого.
Либо иметь его с абстрактной функцией в классе
abstract fun createViewHolder(): TViewHolder
или предоставить его в качестве параметра для конструктора
abstract class NexusAdapter<TData: NexusIdProvider, TViewHolder: NexusViewHolder<TData>>(
protected val ctx: Context,
private val _layoutId: Int,
protected val items: List<TData>,
private val createViewHolder: () -> TViewHolder
) : BaseAdapter()