簡體   English   中英

在 Android 中將 Java 轉換為 Kotlin 后出錯

[英]Error after converting Java to Kotlin in Android

我是 Kotlin 的新手,我轉換了 java 中的一些代碼並陷入了一個錯誤。

這是代碼

Java 代碼:

public abstract class BaseViewHolder<T extends BaseModel> extends RecyclerView.ViewHolder {
public T model;
    public BaseViewHolder(View view,BaseAdapter adapter) {
                    super(view);
                    adapter.select(BaseViewHolder.this);

    }
}
public abstract class BaseAdapter<T extends RecyclerView.ViewHolder >  extends  RecyclerView.Adapter<RecyclerView.ViewHolder>  {

public void select(BaseViewHolder holder) {   }
}

Kotlin 代碼:

abstract class BaseAdapter<T : RecyclerView.ViewHolder> : RecyclerView.Adapter<RecyclerView.ViewHolder>{

fun select(holder: BaseViewHolder<BaseModel>) {
    }
}

abstract class BaseViewHolder<T : BaseModel?> : RecyclerView.ViewHolder {

@JvmField
var model: T? = null

constructor(view: View, adapter: BaseAdapter<RecyclerView.ViewHolder>?) : super(view) {
    adapter.select(this@BaseViewHolder)  
            /// ERROR IS HERE type mismatch required BaseViewHolder<BaseModel> found BaseViewHolder<T>

}}

代碼有什么問題?

我想知道這是否是您想要實現的目標。 查看您的代碼,我認為您想指定BaseAdapter<T extends BaseModel>而不是BaseAdapter<T extends RecyclerView.ViewHolder >

注意:我同意 @Tenfour04 的評論 - 您的 Java 代碼包含原始類型。 看看這里的構造函數參數public BaseViewHolder(View view,BaseAdapter adapter)如何包含一個BaseAdapter沒有 generics 類型,如BaseAdapter<TYPE_GOES_HERE>

abstract class BaseAdapter<T : BaseModel> : RecyclerView.Adapter<RecyclerView.ViewHolder>() {

    fun select(holder: BaseViewHolder<T>) {
    }
}

abstract class BaseViewHolder<T : BaseModel> : RecyclerView.ViewHolder {

    @JvmField
    var model: T? = null

    constructor(view: View, adapter: BaseAdapter<T>) : super(view) {
        adapter.select(this@BaseViewHolder)
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM