[英]How to use extended class in SparseArray container?
Shouldn't that be possible? 那不是可能吗? If not then is there a way to do it similarly?
如果没有,有没有办法做类似的事情?
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
}
}
-------- edit: Updated. --------编辑:已更新。 Is it only way to append specific element to more generic container?
是将特定元素附加到更通用容器的唯一方法吗? It looks little dirty with all this casting.
所有这些铸件看起来都很脏。 But works...
但是有效...
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());
}
}
In your constructor you simply do: 在构造函数中,您只需执行以下操作:
public class DifferenClass{
DifferenClass(){
SparseArray<BaseItem> items = new SparseArray<BaseItem>();
items.append(0, new SpecificItem());
}
}
Additional reading: covariance and contravariance 补充阅读: 协方差和逆方差
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.