Как переопределить свойства классов 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.

Вы можете создать собственное свойство с другим именем, которое бы возвращало значение приведенного поля нужного вам типа.

Другие вопросы по тегам