背景

最近的项目采用Kt编写的,回顾一下kotlin的知识点。
其中和java最特别的几个使用是需要重点学习回顾的:let,run,with,apply,also等等。

回顾

【kotlin】Kotlin学习:run、with、apply、also、let的区别_ide

重点就是上图所描述的,其中的差别主要是 参考

代码

  • let
// 判断中文环境 - it的方式
  protected fun isChinese():Boolean
    {
        mLocale?.let {
            if(it != Locale.CHINA && it != Locale.CHINESE)
            {
                return false
            }
        }
        return true
    }
  • apply
// 返回this 即本对象
 dialog?.apply {
            setCanceledOnTouchOutside(canceledOnTouchOutside())
            setCancelable(cancelable())
        }
  • run
//返回的 this 对象
 mListener?.run {
            ivMic.setOnClickListener {
                this.onMicClick(classUser)
            }
            ivCamera.setOnClickListener {
                this.onCameraClick(classUser)
            }
            ivShare.setOnClickListener {
                this.onShareClick(classUser)
            }
        }
  • with
//包裹该对象,调用该对象的方法
with(container) {
            setChildCountChangedListener { count: Int ->
                if (count == 0) {
                    main_top_whiteboard_name.visibility = View.GONE
                    main_top_page_layout.visibility = View.GONE
                    main_top_sheet_name.visibility = View.GONE
                    main_step_layout.visibility = View.GONE
                    main_top_layout.setBackgroundColor(Color.parseColor("#f4f5f8"))
                    currentHolder = null
                } else {
                    main_top_layout.setBackgroundColor(Color.TRANSPARENT)
                }
            }

            setWhiteboardSelectListener {
                Logger.i(TAG, "container onWhiteboardSelectListener,${it}")
                val holder = container.getWhiteboardViewHolder(it)!!
                onWhiteboardHolderSelected(holder)
                updatePreviewRelations()
                updateToolsVisibility()
            }
            setWhiteboardScrollListener { currentPage: Int, pageCount: Int ->
                Logger.i(
                    TAG,
                    "setWhiteboardScrollListener(),currentPage:${currentPage},pageCount:${pageCount}, ${currentHolder?.getCurrentPage()}"
                )
                main_page_index.text = "%s/%s".format(currentPage.toString(), pageCount.toString())
                docs_preview_list.setSelectedPage(currentPage - 1)
            }
            setWhiteboardClickedListener {
                val isVisible = layout_top_bar.visibility == View.VISIBLE
                layout_top_bar.visibility = if (isVisible) View.GONE else View.VISIBLE
                if (!isVisible) {
                    handler.removeCallbacks(hideTopBarRunnable)
                    handler.postDelayed(hideTopBarRunnable, 5000)
                }
            }
        }
  • also
// it 对象,
 val selectRolePopWindow =
                SelectRolePopWindow(this, join_role.text.toString())
                    .also {
                        it.setOnConfirmClickListener { str ->
                            join_role.text = str
                        }

官方文档