Споткнулся на пустом месте...
Надо определить абстрактное свойство типа IntArray с заданным количеством элементов
Т.е. как-то так надо
abstract val margins:IntArray[4]
или
abstract val margins:Array
Чтобы в дочерних классах нельзя было переопределить массивом с отличным количеством элементов. Так вообще можно делать или я хочу странного?
UPD
Т.е. чтобы в наследнике было так
override val margins = intArrayOf(10, 20, 30, 40)
А вот на такое ругалось на этапе компиляции
override val margins = intArrayOf(10, 20, 30)
override val margins = intArrayOf(10, 20, 30, 40, 60)
Ответ
Самым адекватным решением (в моем случае) оказалось использование data class с перегруженным оператором get
data class MarginArray(val left: Int, val top: Int, val right: Int, val bottom: Int) {
private val _values = arrayOf(left, top, right, bottom)
operator fun get(i: Int): Int = _values[i]
}
Так как мне, по сути, был нужен только синтаксис доступа как к массиву, то хватило перезагрузки get, но никто не мешает добавить все необходимое перегрузкой операторов и проксированием методов к приватному полю _values, например:
fun toList() = _values.toList()
fun iterator() = _values.iterator()
Комментариев нет:
Отправить комментарий