Biryukov239 / matrix-multiplication-kotlin

0 stars 0 forks source link

Не надо использовать `lateinit` не для обратной совместимости с Java! #7

Closed lounres closed 5 months ago

lounres commented 5 months ago

Ещё раз посмотрите на свой абстрактный класс:

abstract class Multiplier {
    protected lateinit var firstMat: FloatArray
    protected lateinit var secondMat: FloatArray
    lateinit var resultMat: FloatArray

    abstract fun calculate()
}

Всем переменным в Ваших реализациях будут присвоены значения только при инициализации. Т.е. стоит заменить lateinit на abstract, а в реализациях просто написать примерно так:

class CPUMultiplier(...) : Matrix() {
    override var firstMat: FloatArray
    override var secondMat: FloatArray
    ...

    init {
        firstMat = ...
        secondMat = ...
        ...
    }
}

Что потом можно превратить вообще в

class CPUMultiplier(...) : Matrix() {
    override var firstMat: FloatArray = ...
    override var secondMat: FloatArray = ...
    ...
}

P.S. Вообще за lateinit обычно по рукам бьют!

Biryukov239 commented 5 months ago

Избавился от lateinit и немного поменял.

lounres commented 5 months ago

Теперь стало идиоматично. Спасибо!