我创建了一个自定义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();
但这会导致强制转换类异常。有人可以解释我做错了什么以及如何成功实现演员阵容吗?谢谢
答案 0 :(得分:4)
您的CustomArrayList
是ArrayList<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
中。