我是java新手,所以我不知道这个技术叫什么,我可能在解释事情上很穷,但我知道你明白。使用已确定的默认成员类型扩展ArrayList
假设我有此两类,项目和它可能会扩展到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
,当我与克定义数据集eneric型...(方案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
有什么办法(场景),所以这两个数据集的产量正确的类型以“项目”为默认类型?像这个:
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
可能的重复http://stackoverflow.com/questions/6101568/java-how-to-set-a-default-for-t-in-someclasst –