如何覆盖Kotlin中的Java类的属性?

Java代码中有一个类ViewHolder

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

所以在这个类的Kotlin实例中包含一个只读types为View属性itemView 。 我想创建一个generics类ViewHolder像这样:

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

如果我删除override修饰符类编译确定,但是当我尝试使用itemView字段时,我得到Overload resolution ambiguity错误。

我想在这里是使MyViewHolder类的MyViewHolder属性是typesV ,而不是View 。 因此,例如, MyViewHolder(TextView(context)).itemView将是一个TextView 。 有没有办法做到这一点?

你的例子中的Java类有一个字段,而不是一个属性。 在Java中访问字段的代码总是引用特定的类名,并且无法在Java或Kotlin中重写另一个类中的字段。

您可以使用不同的名称创建自己的属性,该属性会将字段强制转换为您需要的types。