2016-02-26 30 views
1

某處在Java代碼中還有一類ViewHolder如何覆蓋Kotlin中的java類的屬性?

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

所以在科特林該類的實例包含View類型的只讀屬性itemView。我想創建一個通用類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。有什麼辦法可以做到這一點?

回答

2

您示例中的Java類有一個字段,而不是一個屬性。訪問Java中的字段的代碼始終引用特定的類名稱,並且無法在Java或Kotlin中重寫另一個類中的字段。

您可以使用不同的名稱創建自己的屬性,該屬性會將字段強制轉換爲您需要的類型。