Я пытаюсь выяснить синтаксис для объявления класса с делегированием, которое также имеет ограничения типа. Например, это допустимый синтаксис:
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
и установить границы для производного класса?