为什么是List list = new ArrayList(),而不直接用ArrayList?

编程是要面向对象编程,针对抽象(接口),而非具体。List 是接口,ArrayList是实现。

实现List接口的有ArrayList、LinkedList、Vector等,所以用哪个就直接new 一个接口实现

这是一种很好的设计模式.一个接口有多种实现,这种写法是java面向对象的一种思想,依赖倒置原则,即依赖于抽象不依赖于实现(具体)

给调用者提供的应该是接口或者抽象类,而实现者可以实现或者继承接口或者抽象类来满足调用者,这样调用者不必知道实现者怎样操作,实现者也可以根据具体情况去实现,这样去除了耦合。这就是java设计模式的基础思想之一。

从Java语法上,这种方式是使用接口引用指向具体实现,这样大大提高了代码使用的灵活性。

比如,你若希望用LinkedList的实现来替代ArrayList的话,只需改动一行即可:

List   list   =   new   LinkedList(); 

而程序中的其它部分不需要改动,这样比较灵活,不会失去通用性。

不过有的时候,你如果能确定后边用的全部是ArrayList,最好使用ArrayList list = new ArrayList();

ArrayList   list   =   new   ArrayList()

将ArrayList   改为了List,并且返回了这个List

那么以后用的烦恼就是

 if(list   instanceOf   java.util.ArrayList){ 

 //do something

 } 

 else   if(list   instanceOf   java.util.LinkedList){ 

 //error

 } 

 else   if(list   instanceOf   cn.com.bigc.myList){ 

 //do;……some   xp   not   defined   in   List 

 } 

 ……

如果你要想把这个if   else去掉,那么,你还必须再写几个类。呵呵,这样的代价是不值得的。

如果你事先已经确定了你肯定采用ArrayList,为什么要用List代替呢?如果用List代替,那么肯定是我所有的操作基本上都是它父类已经定义好的,否则这种替代,个人以为不一定合算。

为什么是List list = new ArrayList() 而不直接用ArrayList的更多相关文章

  1. Mybatis学习之自定义持久层框架(一) 为什么要用框架而不直接用JDBC?

    前言 说起Mybatis,相信大家都不会感到陌生,它是一款优秀的持久层框架,应用于java后端开发中,为客户端程序提供访问数据库的接口. 我们都知道,JDBC是Java语言中用来规范客户端程序如何来访 ...

  2. 直接用<img> 的src属性显示base64转码后的字符串成图片

    直接用<img> 的src属性显示base64转码后的字符串成图片 <img src="base64转码后的字符串" ></img> 下面的图片 ...

  3. javase基础回顾(一)ArrayList深入解析 解读ArrayList源代码(JDK1.8.0_92)

    我们在学习这一块内容时需要注意的一个问题是 集合中存放的依然是对象的引用而不是对象本身. List接口扩展了Collection并声明存储一系列元素的类集的特性.使用一个基于零的下标,元素可以通过它们 ...

  4. 直接用<img> 的src属性显示base64转码后的字符串成图片【原】

    直接用<img> 的src属性显示base64转码后的字符串成图片 <img src="data:image/gif;base64,base64转码后的字符串" ...

  5. new ArrayList(0) 和 new ArrayList() 和一样吗?

    第一感觉是一样的,盲猜后者调用了前者,并传入参数 0.然而,无论是 JDK 7 还是 JDK 8,这两个方法构造的结果都是不一样的.JDK 开发人员在这方面作了优化. JDK 7 在 Java 7 中 ...

  6. 服务之间的调用为啥不直接用 HTTP 而用 RPC?

    什么是 RPC?RPC原理是什么? 什么是 RPC? RPC(Remote Procedure Call)-远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.比 ...

  7. BigDecimalAvoidDoubleConstructorRule:不要直接用double变量作为构造BigDecimal的参数

    先上结论: 不要直接用double变量作为构造BigDecimal的参数. 线上有这么一段Java代码逻辑: 1,接口传来一个JSON串,里面有个数字:57.3. 2,解析JSON并把这个数字保存在一 ...

  8. 每日学习笔记:js中可以直接用id名调用的问题?

    在JavaScript中,标准的id选择器调用语法是: document.getElementById('myid').style.width = pc + "%"; 但是,今天发 ...

  9. 只用@property定义一个属性speed,子类不能直接用_speed,需要在interface的成员变量列表里写上_speed

    //写法一: @interface Person : NSObject { } @property (nonatomic, strong) NSString *name; @end @implemen ...

随机推荐

  1. MAC Java 开发环境配置

    JDK Oracle官网 -> Download -> Java for Developers -> Java SE Downloads -> Java Platform (J ...

  2. IDS IPS WAF之安全剖析

    现在市场上的主流网络安全产品可以分为以下几个大类: 1.基础防火墙类,主要是可实现基本包过滤策略的防火墙,这类是有硬件处理.软件处理等,其主要功能实现是限制对IP:port的访问.基本上的实现都是默认 ...

  3. Android手机 Fildder真机抓包

    Fiddler是一个http调试代理,它能 够记录所有的你电脑和互联网之间的http通讯,Fiddler 可以也可以让你检查所有的http通讯,设置断点,以及Fiddle 所有的“进出”的数据(指co ...

  4. 最诡异的Linux fork进程问题(我们平时都在写)

    从来没有遇到过... 运行环境:在Linux自带的文本编辑器中输入C程序,在shell中编译运行,下面直接看代码和运行结果. 第一个代码:#include<stdio.h> #includ ...

  5. javascript判断上传文件大小

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. 是智能手机推动windows xp系统停止服务吗

    昨天是windows xp系统停止服务的大限,各大媒体争相报道,漫天铺地的xp消息充斥网络,xp这个词的百度指数这段时间从4月1日的8411也开始猛涨,特别是这两天4月7日的36470飙升到4月8日的 ...

  7. String的内存分配

    1.String类是final类不能被继承 2.String str="abc"的内部工作 (1)先在栈中定 一个名为str的String类的引用变量 String str: (2 ...

  8. 微信开发学习日记(八):7步看懂weiphp插件机制,核心目标是响应微信请求

    又经过了几个小时的梳理.回顾,截至目前,终于对weiphp这个框架的机制搞明白了些.想要完全明白,自然还需要大把的时间.第1步:   配置微信公众号,http://weiphp.jiutianniao ...

  9. poj2485 Highways

    Description The island nation of Flatopia is perfectly flat. Unfortunately, Flatopia has no public h ...

  10. 以Python角度学习Javascript(二)之DOM

    HTML DOM 定义了访问和操作 HTML 文档的标准方法. DOM 将 HTML 文档表达为树结构. 文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文 ...