Javanese Online

Builder на Kotlin

Проблем особых нет. Единственное, попытался реализовать на котлине паттерн Builder, который мог бы быть доступен из Java привычными для него методами. Интересует правильность моей реализации и что можно все таки улучшить

whalemare


Минусы билдеров:

Билдеры возникают там, где прямой вызов конструктора был бы слишком громоздким. Толстые конструкторы появляются, когда объект знает слишком много. Например, создание SheetMenu выглядит так:

SheetMenu(
        titleId = R.string.menuTitle, // кстати, не хватает @StringRes
        title = null,
        menu = R.menu.someMenu, // не хватает @MenuRes
        layoutManager = LinearLayoutManager(context),
        adapter = null,
        click = MenuItem.OnMenuItemClickListener { toast("click!"); true },
        autoCancel = true,
        showIcons = true
)

Этот объект пытается всё самостоятельно контролировать. Из-за этого возникают нестыковки:

Замечания, не касающиеся билдера непосредственно

Адаптер

open class ViewHolder(itemView: View?) : RecyclerView.ViewHolder(itemView) {
    var imageIcon: ImageView = itemView?.findViewById(R.id.image_icon) as ImageView
    var textTitle: TextView = itemView?.findViewById(R.id.text_title) as TextView
}

Отличный пример использования nullability не по назначению. Можно передать null вместо view, тогда выражение itemView?.findViewById(R.id.image_icon) будет равно null, а его никак не скастить в ImageView.

Javanese.Online в GitHub

Чаты и каналы в Telegram

RSS-лента