转换为自定义ArrayList

时间:2018-10-18 10:57:38

标签: java arraylist casting

我创建了一个自定义ArrayList对象,并在尝试强制转换为该对象时收到错误消息。我想我误会了某些东西,因为我希望它能起作用。如果我有一个自定义ArrayList对象,它将仅处理整数的ArrayList:

public class CustomArrayList extends ArrayList<Integer>{

    public void customMethod() {
        // do things with integer arraylist
    }
}

我希望我可以像下面这样投射整数列表:

List<Integer> myList = new ArrayList<>();
((CustomArrayList) myList).customMethod();

但这会导致强制转换类异常。有人可以解释我做错了什么以及如何成功实现演员阵容吗?谢谢

1 个答案:

答案 0 :(得分:4)

您的CustomArrayListArrayList<Integer>,但是ArrayList<Integer>不是CustomArrayList

如果要将任意ArrayList<Integer>转换为CustomArrayList,则可以编写:

List<Integer> myList = new ArrayList<>();
CustomArrayList customList = new CustomArrayList(myList);
customList.customMethod();

这将需要向CustomArrayList添加一个接受Collection<Integer>的构造函数,并将其传递给ArrayList的{​​{1}}构造函数。

public ArrayList(Collection<? extends E> c

请注意,使用此构造函数创建的public CustomArrayList(Collection<Integer> c) { super(c); } 实例是原始CustomArrayList的副本,因此该实例中的更改不会反映在原始ArrayList中。