Как создать объект универсального типа в классе - PullRequest
0 голосов
/ 07 мая 2018

У меня есть следующий класс

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 Ответ

0 голосов
/ 07 мая 2018

Вы не можете сделать это. Вы должны предоставить фабричный метод для этого.

Либо есть с абстрактной функцией в классе

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