Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么要使用列表<;对象>;列表=新阵列列表<;对象>;()内法_Java_Oop - Fatal编程技术网

Java 为什么要使用列表<;对象>;列表=新阵列列表<;对象>;()内法

Java 为什么要使用列表<;对象>;列表=新阵列列表<;对象>;()内法,java,oop,Java,Oop,最近,我对这一宣言感到关切 为什么我们总是需要这样做: 公共列表doSth(列表B){ 列表结果=新建ArrayList(); //在本地做一些事情来操纵结果 返回结果; } 而不是 公共列表doSth(列表B){ ArrayList结果=新建ArrayList(); //在本地做一些事情来操纵结果 返回结果; } 我知道这一点: 执行List result=new ArrayList()的主要原因是将代码与接口的特定实现解耦。这是更可取的,因为代码的其余部分只知道数据的类型是List,因此

最近,我对这一宣言感到关切

为什么我们总是需要这样做:

公共列表doSth(列表B){
列表结果=新建ArrayList();
//在本地做一些事情来操纵结果
返回结果;
}
而不是

公共列表doSth(列表B){
ArrayList结果=新建ArrayList();
//在本地做一些事情来操纵结果
返回结果;
}
我知道这一点:

执行
List result=new ArrayList()
的主要原因是将代码与接口的特定实现解耦。这是更可取的,因为代码的其余部分只知道数据的类型是List,因此您可以轻松地在List接口的不同实现之间切换

但对于我的示例,我仍然接收并返回
List
,所以其他调用者只知道接口,而不知道具体的实现。如果我们稍后更改为其他类型的
列表
,则应该可以

对我来说,两边都可以


你呢?

为什么你认为脱钩应该只适用于其他人?如果方法中的代码不需要知道
列表的特定类型,那么为什么这比对方法外的代码隐藏信息更无效?所有代码都可以从不必要的细节中分离出来。你不应该返回原始类型。我有点明白你的意思;在这种特殊情况下,这并不太重要。如果它仅限于一个方法,那么您总是可以轻松地对其进行更改,而不是将其作为API的一部分,在API中,您无法更改它而不可能破坏客户端的功能。但是
列表
的键入时间较短,扫描速度稍快。如果以后要将其更改为LinkedList,只需在1个位置执行此操作,而不需要在2个位置执行此操作。即使差别不大,也没有真正好的理由不使用接口。当您指定
List
时,您可以使用任何列表、ArrayList、LinkedList。您还知道,没有人使用任何ArrayList-only方法。稍后,如果代码被修改,并且有人想要使用不同的列表,他们可以用列表中的任何内容替换它。因此,在您的示例中,您可能更喜欢ArrayList,特别是因为您在方法末尾没有公开ArrayList。@Bob:如果您实际使用了只有
ArrayList
具有的任何方法,那么请务必将其声明为
ArrayList
。但是,如果我遇到一行内容是
listl=newarraylist()
,那么我马上知道有人需要一个列表,但是如果我看到
arraylistl=newarraylist())
然后我必须假设或检查他们是否真的需要一个
ArrayList
,或者他们是否简单地把它放在那里,因为IDE是这样自动完成的。解析/解释特定的声明需要更多的精力,因此应该只在必要时使用它。