答案 0 :(得分:9)
这称为delegation,具体地说,它是一种称为委托实现的委托类型。
这样做,类C
使用另一个对象实现了接口。
即当您调用接口中定义的方法(函数)时,该调用将转移到您委托的对象中,即field
interface T {
fun print()
}
class TImpl: T {
override fun print() = print("Hello World!")
}
class C(val field: T) : T by field {...}
fun main() {
val c = C(TImpl())
c.print() //Prints: Hello World!
}
由于类C通过使用字段实现T,因此print()
调用被转移到TImpl
。
答案 1 :(得分:2)
此语法是kotlin语言提供的快捷方式,它表示C实现T并将所有T方法实现委托给conv_handler = ConversationHandler(
entry_points=[CommandHandler('start', start)],
states={
CHOOSING: [MessageHandler(Filters.regex('^(Age|Favourite colour|Number of siblings)$'),
regular_choice),
MessageHandler(Filters.regex('^Something else...$'),
custom_choice)
],
TYPING_CHOICE: [MessageHandler(Filters.text,
regular_choice)
],
TYPING_REPLY: [MessageHandler(Filters.text,
received_information),
],
ConversationHandler.TIMEOUT: [MessageHandler(Filters.text | Filters.command, timeout)],
},
fallbacks=[MessageHandler(Filters.regex('^Done$'), done)],
conversation_timeout=60
def timeout(update, context):
update.message.reply_text('timeout reached, hope to see you next time',reply_markup=ReplyKeyboardRemove())
成员。
在Java或其他OO语言中,您可以通过在C中声明每个T方法并调用field.theMethod中的每个方法(也称为无价值样板代码)来实现相同目的
Kotlin在生成的Java字节码中为您完成此操作。