如何在Kotlin中覆盖java类的属性?

时间:2016-02-26 14:18:52

标签: kotlin java-interop

在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 个答案:

答案 0 :(得分:2)

示例中的Java类有一个字段,而不是属性。访问Java中字段的代码始终引用特定的类名,并且无法在Java或Kotlin中覆盖另一个类中的字段。

您可以使用不同的名称创建自己的属性,该属性会将字段的值返回到您需要的类型。