6

因此,据我了解,应该始终对接口进行编程,例如:

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?
}

我可以在这里遵循更好的模式或以某种方式做一些事情来避免演员表吗?在这种情况下,铸造看起来很丑陋。

谢谢。

4

1 回答 1

7

首先问自己一个问题:为什么需要一个ArrayList?此外,您的 API 的客户是否应该关心它?你有几个选择:

  • getIntegers()退货ArrayList<Integer>。_ 这不是犯罪

  • 考虑不太强的接口要求,例如AbstractList作为共识

  • 创建一个防御副本,以便您可以使用任何List

    ArrayList<Integer> list = new ArrayList<Integer>(getIntegers());
    

    如果已经是. ,请考虑使用instanceof运算符以避免不必要的复制。getIntegers()ArrayList

换句话说 - 没有办法根据您的要求和优雅的方式避免这种铸造。

于 2012-07-20T21:46:40.063 回答