1

Java代码中的某处有一个类ViewHolder

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

itemView因此,在 Kotlin 中,此类的实例包含type的只读属性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出现错误。

我在这里想要的是使 class 的itemView属性MyViewHolder为 type V,而不是View. 例如,MyViewHolder(TextView(context)).itemView将是一个TextView. 有什么办法可以做到这一点?

4

1 回答 1

2

您示例中的 Java 类有一个字段,而不是一个属性。在 Java 中访问字段的代码总是引用特定的类名,并且不可能覆盖另一个类中的字段,无论是在 Java 中还是在 Kotlin 中。

您可以创建自己的属性,使用不同的名称,将字段转换为您需要的类型的值。

于 2016-02-26T14:48:08.063 回答