我试着分析以下示例代码
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)
}
},我的问题与为什么必须引用回退有关。类现在应该包括回退方法,但是在这种特殊情况下,方法名将发生冲突。在这种情况下,这就是我们使用fallback.suggestSelection()而不是仅仅使用suggestionSelection()的原因吗?我想知道为什么作者必须授权退却?
相反,我认为这会奏效:
@SuppressLint("NewApi")
override fun suggestSelection(request: TextSelection.Request): TextSelection {
return suggestSelection(request)
// return fallback.suggestSelection(request)
}注意我是如何移除退路的。这是一个无限循环,还是会调用回退的实现"suggestSelection“?
发布于 2018-10-15 05:23:31
问题的症结是,为何我们要作出以下呼吁:
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,这样在运行时就可以清楚地知道需要调用哪个方法为。https://stackoverflow.com/questions/52809140
复制相似问题