我正在尝试分析following sample code:
class StylingAndroidTextClassifier(
private val context: Context,
private val fallback: TextClassifier,
private val factory: TextClassifierFactory = FrameworkFactory()
) : TextClassifier by fallback {
private val stylingAndroid = "Styling Android"
private val stylingAndroidUri = "https://blog.stylingandroid.com"
private val regex = Regex("Styling\\s?Android", RegexOption.IGNORE_CASE)
override fun suggestSelection(request: TextSelection.Request): TextSelection {
return fallback.suggestSelection(request)
}
override fun classifyText(request: TextClassification.Request): TextClassification {
return fallback.classifyText(request)
}
}
我的问题与为什么必须引用回退有关。现在,该类应包括fallbacks方法,但是在这种特定情况下,方法名称将发生冲突。在这种情况下,这就是为什么我们使用fallback.suggestSelection()而不是仅仅proposalionSelection()的原因?我想知道为什么作者必须委托回退?
相反,我以为这会起作用:
@SuppressLint("NewApi")
override fun suggestSelection(request: TextSelection.Request): TextSelection {
return suggestSelection(request)
// return fallback.suggestSelection(request)
}
请注意我如何删除后备广告。这将是一个无限循环,还是会调用“ suggestSelection”的后备实现?
答案 0 :(得分:2)
问题的关键是,为什么我们需要以下调用:
override fun suggestSelection(request: TextSelection.Request): TextSelection {
return fallback.suggestSelection(request)}
显式包含
private val fallback: TextClassifier
时,然后是显式限定符和原因。
主要原因是如果我们编写这样的代码,则根据编程语言,可能会发生两种情况之一。
override fun suggestSelection(request: TextSelection.Request): TextSelection {
return suggestSelection(request)}
suggestSelection
,无论哪种情况,最好以fallback
之类的对象名称来明确限定,以便在运行时清晰可见-时间,需要调用哪种方法