Kotlin: делегирование с общими ограничениями c - PullRequest
0 голосов
/ 15 марта 2020

Я пытаюсь выяснить синтаксис для объявления класса с делегированием, которое также имеет ограничения типа. Например, это допустимый синтаксис:

open class Cell<T>(val innerList: MutableList<T> = mutableListOf()) : MutableList<T> by innerList

Но теперь я хочу убедиться, что T расширяет ClassFoo и реализует InterfaceBar. Куда мне положить ключевое слово where?

Вот некоторые вещи, которые я пробовал, которые не компилируются:

open class Cell<T>(val innerList: MutableList<T> = mutableListOf()) : MutableList<T> by innerList where T : ClassFoo, T : InterfaceBar

open class Cell<T>(val innerList: MutableList<T> = mutableListOf()) where T : ClassFoo, T : InterfaceBar : MutableList<T> by innerList

open class Cell<T>(val innerList: MutableList<T> = mutableListOf()) : MutableList<T> where T : ClassFoo, T : InterfaceBar by innerList

Не совместимы ли эти ограничения с делегированием? Другими словами, должен ли я просто расширить свой класс Cell и установить границы для производного класса?

1 Ответ

0 голосов
/ 15 марта 2020

Первая версия верна, но вам нужно поставить where на новую строку (возможно, ошибку)

open class Cell<T>(val innerList: MutableList<T> = mutableListOf()) : MutableList<T> by innerList
        where T : ClassFoo, T : InterfaceBar
...