java - 如何在SparseArray容器中使用扩展类?

标签 java polymorphism containers

这应该不可能吗?如果没有那么有没有办法类似地做到这一点?

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());
    }
}

最佳答案

使用wildcards

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

关于java - 如何在SparseArray容器中使用扩展类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19911714/

相关文章:

azure - 如何删除azure容器中的旧文件

java - 使用 Spring Security 在同一个应用程序中的两个领域?

java - NFC 权限错误

java - 如何从 jmx-console 关闭 JBOSS

c++ - 从另一个基本方法调用重写的方法

c++ - 对象具有不兼容的类型限定符,可能是继承/多态性错误?

linux - 在 RHEL 上安装 Docker 时出现错误

java - 搜索多个表并返回/映射动态结果集

c++ - 隐藏抽象基类的复制构造函数

docker - curl: (56) Recv failure: connection by peer in golang with docker 重置