因此,据我所知,应该始终编程到接口,如:
List<Integer> list = new LinkedList<Integer>();
所以,在我的课程后期我有:
public List<Integer> getIntegers() {
return list;
}
public void processIntegers() {
// I need an arraylist here
ArrayList<Integer> list = (ArrayList<Integer>) getIntegers(); // can I do this better, without a cast?
}
我可以在这里遵循更好的模式,或者以某种方式做些什么来避免演员表演?在这种情况下,施法似乎非常难看。
感谢。
答案 0 :(得分:7)
首先问自己一个问题:为什么需要ArrayList
?此外,您的API的客户应该关心它吗?你几乎没有选择:
让getIntegers()
返回ArrayList<Integer>
。这不是犯罪
考虑不太强大的界面要求,例如AbstractList
作为共识
创建一个防御性副本,以便您可以使用任何List
:
ArrayList<Integer> list = new ArrayList<Integer>(getIntegers());
如果instanceof
已经是getIntegers()
,请考虑使用ArrayList
运算符来避免不必要的副本。
换句话说 - 没有办法以你的要求和优雅的方式避免这种演员。