簡體   English   中英

如何在SparseArray容器中使用擴展類?

[英]How to use extended class in SparseArray container?

那不是可能嗎? 如果沒有,有沒有辦法做類似的事情?

public abstract class BaseItem {
}

public class SpecificItem extends BaseItem {
    public int value;
}


public class AnAdapter{
    public AnAdapter(SparseArray<BaseItem> items){
    }
}

public class DifferenClass{
    public DifferenClass(){
        SparseArray<SpecificItem> items = new SparseArray<SpecificItem>();
        AnAdapter anAdapter = new AnAdapter(items); // here is wrong type   
    }
}

--------編輯:已更新。 是將特定元素附加到更通用容器的唯一方法嗎? 所有這些鑄件看起來都很臟。 但是有效...

public abstract class BaseItem {
}

public class SpecificItem extends BaseItem {
    public int value;
}


public class AnAdapter{
    public AnAdapter(SparseArray<? extends BaseItem> items){
    }
}

public class DifferenClass{
    DifferenClass(){
        SparseArray<? extends BaseItem> items = new SparseArray<BaseItem>();
        ((SparseArray<SpecificItem>)items).append(0,new SpecificItem());
    }
}

使用通配符

public class AnAdapter{
    public AnAdapter(SparseArray<? extends BaseItem> items){
    }
}

在構造函數中,您只需執行以下操作:

 public class DifferenClass{
    DifferenClass(){
        SparseArray<BaseItem> items = new SparseArray<BaseItem>();
        items.append(0, new SpecificItem());
    }
}

補充閱讀: 協方差和逆方差

暫無
暫無

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

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