Проблемы с иерархией в КотлинеAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Проблемы с иерархией в Котлине

Сообщение Anonymous »

У меня есть класс TextElement с переменной уровня класса с именем textGravity, которая инициализируется значением по умолчанию Element.HorizontalGravity.DEFAULT
В конструкторе TextElement, я вызываю суперконструктор родительского класса Element, и в этом конструкторе переменная textGravity получила свое значение. Я знаю, что это не очень хорошая практика, но это унаследованный проект с такой структурой, которую пока нельзя изменить из-за более сложных параметров, которые я не могу здесь объяснить.
Проблема заключается в том, что после установки textGravity в родительском методе decode родительского класса Element... установленное значение теряется, потому что по какой-то причине, которую я не понимаю, сбрасывается по умолчанию, поскольку эта строка дочернего класса TextElement вызывается снова после суперконструктора:
var textGravity = Element.HorizontalGravity.DEFAULT

Почему это происходит? Как это возможно и как этого избежать?
class TextElement : Element {
var textGravity = Element.HorizontalGravity.DEFAULT

constructor(binaryReader: BinaryReader) : super(binaryReader) {
decode(binaryReader)
}
}

open class Element {
constructor(reader: BinaryReader) {
this.decode(reader)
}
private fun decode(reader: BinaryReader) {
if (this is TextElement) {
(this as TextElement).textGravity = Element.HorizontalGravity.MIDDLE
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/791 ... -in-kotlin
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»