假设我正在使用一个我不知道其源代码的库。它有一个返回列表的方法,如下所示:
public List<SomeObj> getObjs() { ... }
我想知道这是否是一个好主意:
ArrayList<SomeObj> objs = (ArrayList<SomeObj>) getObjs();
例如,如果 getObjs() 中 List 的具体实现是一个 LinkedList
那么是否会存在某种类型差异?
最佳答案
不,这不是一个好主意。您应该始终使用接口(interface) (List
) 来声明列表变量,除非您出于某种原因需要 ArrayList
的特定行为。
另外,如果这样做,您需要真正确定返回的列表是ArrayList
。在这种情况下,getObjs()
的 promise 约定只是返回类型是某种List
,因此您不应该假设任何其他内容。即使现在返回的 List
是 ArrayList
,也没有什么可以阻止 getObjs()
的实现者稍后更改 的类型返回列表
,这会破坏您的代码。
关于java - 列表应该如何转换为具体的实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11867217/