【发布时间】:2016-11-07 13:36:24
【问题描述】:
我是java新手,所以我不知道这种技术叫什么,我可能不擅长解释事情,但我希望你能理解。
假设我有这两个类,Item,它可能会扩展到 ExtendedItem
public class Item { }
public class ExtendedItem extends Item {}
我想为其创建集合包装器,因此我创建了一个从 ArrayList 扩展的类...(场景 1)
public class DataSet extends ArrayList<Item> {}
然后初始化它
DataSet dataset1 = new DataSet();
DataSet<ExtendedItem> dataset2 = new DataSet<ExtendedItem >();
dataset1.get(0) // yield Item instance... which is in this case, correct
dataset2.get(0) // also yield Item instance
现在,当我用泛型类型定义 DataSet 时...(场景 2)
public class DataSet<T extends Item> extends ArrayList<Item> {}
它产生了
DataSet dataset1 = new DataSet();
DataSet<ExtendedItem> dataset2 = new DataSet<ExtendedItem >();
dataset1.get(0) // yield Object instance.... dont't want this
dataset2.get(0) // yield ExtendedItem instance... correct
有没有什么办法(场景)让两个数据集都产生正确的类型,默认类型为“Item”?,像这样:
DataSet dataset1 = new DataSet();
DataSet<ExtendedItem> dataset2 = new DataSet<ExtendedItem >();
dataset1.get(0) // yield Item instance
dataset2.get(0) // yield ExtendedItem instance
-------------------------- 编辑 ---------------- ------------
我可能找到了解决方案:
public class DataSet<E extends Item> extends ArrayList<E> implements List<E>, RandomAccess, Cloneable, Serializable {
@Override
public E get(int i) {
return super.get(i);
}
@Override
public int size() {
return super.size();
}
}
这样:
DataSet dataset1 = new DataSet();
DataSet<ExtendedItem> dataset2 = new DataSet<ExtendedItem >();
dataset1.get(0) // yield Item instance... correct
dataset2.get(0) // yield ExtendedItem instance... correct
【问题讨论】: