Как переопределить свойства классов Java в Kotlin?
Где-то в коде Java есть класс ViewHolder
:
public static abstract class ViewHolder {
public final View itemView;
public ViewHolder(View itemView) { this.itemView = itemView; }
....
}
Так что в Kotlin экземпляры этого класса содержат свойство только для чтения itemView
типа View
, И я хочу создать общий класс ViewHolder<V>
как это:
class MyViewHolder<V : View>(itemView: V) : ViewHolder(itemView) {
override val itemView = super.itemView as V // error: itemView overrides nothing
}
И если я уберу override
Модификатор класса компилируется нормально, но когда я пытаюсь использовать itemView
поле я получаю Overload resolution ambiguity
ошибка.
Что я хочу здесь, чтобы сделать itemView
собственностью MyViewHolder
класс, чтобы быть типа V
не View
, Так, например, MyViewHolder(TextView(context)).itemView
будет TextView
, Есть ли способ добиться этого?
1 ответ
Класс Java в вашем примере имеет поле, а не свойство. Код, который обращается к полю в Java, всегда ссылается на определенное имя класса, и невозможно переопределить поле в другом классе, ни в Java, ни в Kotlin.
Вы можете создать собственное свойство с другим именем, которое бы возвращало значение приведенного поля нужного вам типа.