java - 列表应该如何转换为具体的实现?

标签 java

假设我正在使用一个我不知道其源代码的库。它有一个返回列表的方法,如下所示:

public List<SomeObj> getObjs() { ... }

我想知道这是否是一个好主意:

ArrayList<SomeObj> objs = (ArrayList<SomeObj>) getObjs();

例如,如果 getObjs() 中 List 的具体实现是一个 LinkedList 那么是否会存在某种类型差异?

最佳答案

不,这不是一个好主意。您应该始终使用接口(interface) (List) 来声明列表变量,除非您出于某种原因需要 ArrayList 的特定行为。
另外,如果这样做,您需要真正确定返回的列表是ArrayList。在这种情况下,getObjs() 的 promise 约定只是返回类型是某种List,因此您不应该假设任何其他内容。即使现在返回的 ListArrayList ,也没有什么可以阻止 getObjs() 的实现者稍后更改 的类型返回列表,这会破坏您的代码。

关于java - 列表应该如何转换为具体的实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11867217/

相关文章:

java - 如何转义 IntelliJ 文件模板中的 Maven 属性

java - System.err : java.net.UnknownHostException:无法解析主机 "proxy01"

java - 为什么我无法访问这个放入 Model 对象的列表到这个 Spring MVC 项目中?

java - 如何将搜索结果全部集中在一个框中?而不是(JOptionPane单独的框)

java - 对象未在另一个类中读取 - Java

java - 无法导入 javax.ejb.Schedules 和 javax.ejb.Schedule 注释

java - 如何配置 Proguard 以保持具有不同返回时间的静态方法

java - 将动画 gif 从 JAR 文件加载到 ImageIcon

java - 如何获取jsp中复选框的值?

java - 在 Java 中将日期转换为毫秒