我有以下介面,其函式接受與介面本身具有相同型別接收器的 lambda:
interface WebhookEventInterface<T> {
operator fun invoke(block: WebhookEventInterface<T>.() -> Unit) {..}
}
現在我想用另一個介面擴展這個介面,在前一個介面之上提供額外的功能/特性,比如:
interface PushPullRequestFeatures<T> : WebhookEventInterface<T> {
override operator fun invoke(block: PushPullRequestFeatures<T>.() -> Unit) {..}
}
當然,編譯器會抱怨,因為PushPullRequestFeatures他的超級invoke方法存在函式簽名沖突,并且override沒有覆寫任何內容。
如何在提供相同型別的接收器的同時覆寫invokesuper的方法?WebhookEventInterfacePushPullRequestFeatures
uj5u.com熱心網友回復:
在 Kotlin 中,您根本無法(據我所知)在覆寫時更改引數型別,因此您也無法以這種特定方式更改它們。
您可以做的是將接收器型別轉換為另一個型別引數:
interface WebhookEventInterface<T, out W : WebhookEventInterface<T, W>> {
operator fun invoke(block: W.() -> Unit) { ... }
}
interface PushPullRequestFeatures<T> : WebhookEventInterface<T, PushPullRequestFeatures<T>> {
override operator fun invoke(block: PushPullRequestFeatures<T>.() -> Unit) { ... }
}
(如果你不這樣做override,接收器型別PushPullRequestFeatures<T>無論如何都會是,因為這W就是這里的內容。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/311174.html
