在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
。有没有办法实现这个目标?
答案 0 :(得分:2)
示例中的Java类有一个字段,而不是属性。访问Java中字段的代码始终引用特定的类名,并且无法在Java或Kotlin中覆盖另一个类中的字段。
您可以使用不同的名称创建自己的属性,该属性会将字段的值返回到您需要的类型。