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 = ...
...
}
Ещё раз посмотрите на свой абстрактный класс:
Всем переменным в Ваших реализациях будут присвоены значения только при инициализации. Т.е. стоит заменить
lateinit
наabstract
, а в реализациях просто написать примерно так:Что потом можно превратить вообще в
P.S. Вообще за
lateinit
обычно по рукам бьют!