Как переопределить свойства классов java в Котлине?

Где-то в Java-коде есть класс ViewHolder :

 public static abstract class ViewHolder { public final View itemView; public ViewHolder(View itemView) { this.itemView = itemView; } .... } 

Таким образом, в экземплярах Kotlin этого класса содержится свойство itemView только для itemView типа type View . И я хочу создать общий класс ViewHolder<V> следующим образом:

 class MyViewHolder<V : View>(itemView: V) : ViewHolder(itemView) { override val itemView = super.itemView as V // error: itemView overrides nothing } 

И если я override модификатор override , класс компилирует ОК, но когда я пытаюсь использовать поле itemView я получаю ошибку Overload resolution ambiguity .

Я хочу здесь, чтобы свойство MyViewHolder класса MyViewHolder было типа V , а не View . Например, MyViewHolder(TextView(context)).itemView будет TextView . Есть ли способ достичь этого?

Класс Java в вашем примере имеет поле, а не свойство. Код, который обращается к полю в Java, всегда относится к определенному имени класса, и невозможно переопределить это поле в другом классе, либо на Java, либо в Kotlin.

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