【问题标题】:How to override properties of java classes in Kotlin?如何在 Kotlin 中覆盖 java 类的属性?
【发布时间】:2016-02-26 14:18:52
【问题描述】:

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 错误。

我在这里想要的是使MyViewHolder 类的itemView 属性为V 类型,而不是View。例如,MyViewHolder(TextView(context)).itemView 将是 TextView。有什么方法可以实现吗?

【问题讨论】:

    标签: kotlin java-interop


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-06
      • 2021-12-30
      • 2017-08-22
      • 1970-01-01
      • 1970-01-01
      • 2012-08-02
      • 1970-01-01
      相关资源
      最近更新 更多