仅允许ArrayList中的特定类型

时间:2011-10-09 15:41:26

标签: java generics arraylist

有没有办法将ArrayList类子类化为仅允许特定类(或其子类)的对象。
具体来说,我有一个名为RecordStatus的基类,我需要使用基于此类的对象创建ArrayLists 我知道基于ArrayList<RecordStatus>创建一个类很容易,但是每次从数组中检索一个元素时,我都需要将它转换为原始类。
有更简单的方法吗?

5 个答案:

答案 0 :(得分:2)

  

有没有办法将ArrayList类子类化为仅允许对象   特定类别(或其子类)。具体来说,我有一个基地   名为RecordStatus的类,我需要使用对象创建ArrayLists   基于这个课程。

这正是Java中的泛型构造允许您做的事情。请注意,只要ArrayList<RecordStatus>的所有子类具有相同的API,您就不必强制转换RecordStatus的实例。如果子类具有不同的方法/字段,则只需执行此操作。例如,如果RecordStatus具有方法setStatus,子类也是如此,则不需要进行转换,因为Java的多态性的动态分派将确保实现的方法是正确的基于在运行时调用该方法的实例的类型。

答案 1 :(得分:1)

如果正确设置了类型,则不需要投射任何内容。例如,这应该有效:

List<RecordStatus> myList = new ArrayList<RecordStatus>();
//Add values to the list
RecordStatus myRecordStatus = myList.get(0);

但是如果你真的想要继承ArrayList,你可以执行以下操作:

private class MyArrayList<R extends RecordStatus> extends ArrayList<R> {
      ...
}

答案 2 :(得分:0)

ArrayList<? extends RecordStatus>尽可能接近。

答案 3 :(得分:0)

我使用像这样的行

创建了没有麻烦的arrayList
List<RecordStatus> list = new ArrayList<RecordStatus>();

答案 4 :(得分:0)

试试Collections.checkedList(List<E> list, Class<E> type)。这将确保类型安全。