Kotlin 使用或在参数中?

Kotlin using or in a paramater?

我有两个函数和两个数组。函数和数组做同样的事情并且看起来完全一样,除了一个接受一个字符串,一个接受一个可跨越的字符串。

它们看起来像这样:

private fun createTextView(randomText: String): View {
        tv = TextView(context)
        val linearLevel1: LinearLayout.LayoutParams = LinearLayout.LayoutParams(
            ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.WRAP_CONTENT
        )
        tv.layoutParams = linearLevel1
        tv.gravity = Gravity.END
        tv.typeface = ResourcesCompat.getFont(context, R.font.blogger_sans_medium)
        tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 25f)
        tv.text = randomText
        return tv
    }
    private fun createTextView(randomText: SpannableStringBuilder): View {
        tv = TextView(context)
        val linearLevel1: LinearLayout.LayoutParams = LinearLayout.LayoutParams(
            ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.WRAP_CONTENT
        )
        tv.layoutParams = linearLevel1
        tv.gravity = Gravity.END
        tv.typeface = ResourcesCompat.getFont(context, R.font.blogger_sans_medium)
        tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 25f)
        tv.text = randomText
        return tv
    }

两个数组看起来像这样

private var textViewArr = ArrayList<String>()
private var textViewArrSpan = ArrayList<SpannableStringBuilder>()

我可以把这些结合起来吗?我可以让一个函数接受参数 A 或 B 或者用 A 或 B 初始化变量吗?我试着在网上搜索,我看到了建议我做我已经做过的事情的地方。想知道是否有更有效的方法。

两者都String and SpannableStringBuilder implement CharSequence, and reading the documentation for TextView.setText(),它也需要一个CharSequence

所以我认为你可以这样做:

private fun createTextView(randomText: CharSequence): View {
    tv = TextView(context)
    val linearLevel1: LinearLayout.LayoutParams = LinearLayout.LayoutParams(
        ViewGroup.LayoutParams.MATCH_PARENT,
        ViewGroup.LayoutParams.WRAP_CONTENT
    )
    tv.layoutParams = linearLevel1
    tv.gravity = Gravity.END
    tv.typeface = ResourcesCompat.getFont(context, R.font.blogger_sans_medium)
    tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 25f)
    tv.text = randomText
    return tv
}

不重要但相关,我们也可以将其作为表达式...

private fun createTextView(randomText: CharSequence): View =
    TextView(context).apply {
        layoutParams = LinearLayout.LayoutParams(
            ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.WRAP_CONTENT
        )
        gravity = Gravity.END
        typeface = ResourcesCompat.getFont(context, R.font.blogger_sans_medium)
        setTextSize(TypedValue.COMPLEX_UNIT_SP, 25f)
        text = randomText
   }

randomText 的类型从 StringSpannableStringBuilder 更改为 CharSequence