为什么要用 List 而不是 ArrayList 有什么特别的用意吗?
解决方案 »
- RSA 公钥解密时候报错 BadPaddingException异常,麻烦大家看看
- 询问Core Java中文第八版的一个问题
- 紧急String字符串?
- 如何捕捉控制台上的键盘事件
- 在Jtree中添加节点和删除节点,如何把添加的节点保存.下次启动程序的时候原来添加的节点还在.
- 一个没有人回答的问题!!
- 请问要连接到一个URL时,怎么设置超时限制啊~~~~~~~~
- 有个jdbc的问题向大家请教??
- valueOf(Gender.class,"FEMALE") 中的Gender.class是什么用法
- 想用Swing实现一个 简单的工作流小控件,求类似例子!
- 一个高中肄业生,没有任何基础,一个月的时间学完《Java ?How To Program》上册可以么?不上机,就是光看书的方式
- JSP与MYSQL问题 请指点
ArrayList是实现。接口有什么好处,这种定义方式就有什么好处
当然你可以用
ArrayList list = new ArrayList()
但是一般不这么用
从Java语法上,这种方式是使用接口引用指向具体实现。
//----------------送个笑话-------------------儿子问爸爸,欲火焚身是什么意思,爸爸便委婉地告诉他是某人想要什么东西的意思。 语文课上没有粉笔,年轻的女老师刚好自己要去取时,儿子就立刻站起来说;“老师,我知道你是欲火焚身,还是让我满足你吧~” www.xiaohua007.com
List list = new LinkedList();
而程序中的其它部分不需要改动,这样比较灵活
比如说动物(Animal)是一个接口,猫,狗是动物中的一种(实现这个接口)
Animal animal = new Cat() 或者 Animal animal = new Dog()
当你产生了一个猫或狗的实例后,返回的是个动物
List和ArrayList就象这样的
这个如果你想把存储结构该为LinkedList的时候,只要把List list = new ArrayList()该为list = new LinkedList()而其他的所有的都不需要改动。不赞成这种观点,当然这种观点的人很多。
我觉得用接口代替实际类的好处在与声明一个方法参数以及返回值时,而不是具体使用时。
因此,在模式书上说的Factory,Bridge,decorate,strategy,上有很多应用,(其实不用的话,就没法实现了)我想没有多少人真的去这样用Map map = new HashMap();犯不着吧。
ArrayList是实现。当然还有其他的实现。
引用向下兼容,我想就是对返回值的兼容吧!
java自身中就有很多这样的应用!
说话要自重吧,你这样只能是看出你的素质问题了(底BS)!
可以简单的告诉你们,任何系统都应该针对抽象编程,而不是实际编程。不可理喻,反正我对面向对象没有什么研究,但你这话确实错的
比如
ArrayList list = new ArrayList()
将ArrayList 改为了List,并且返回了这个List
那么以后用的烦恼就是
if(list instanceOf java.util.ArrayList){
//do;....}
else if(list instanceOf java.util.LinkedList)
{
//error
}
else if(list instanceOf cn.com.bigc.myList)
{
//do;some op not defined in List}
////等等。
如果你要想把这个if else去掉,那么呵呵,你还必须再写几个类。这样的代价是不值得的。
看过XP吧,简单适应法则。
如果你事先已经确定了你肯定采用ArrayList,为什么要用List代替呢?如果用List代替,那么肯定是我所有的操作基本上都是它父类已经定义好的,否则这种替代,个人以为不一定合算。所有大师们的话的是具体的针对性问题。而不是一揽子方案。
table.setValueAt(o, 0, 0);o不是抽象类,但是在o满足条件下应该针对o编程,否则在修改时将会导致该动量较大。另外java.lang.StringBuffer buffer = new java.lang.StringBuffer("aaa")
table.setValueAt(buffer.toString(), 0, 0);
buffer.setLength(0);当然StringBuffer的包和一些方法我记不住,但是却表达了为什么要抽象,应该如何抽象的意义。
其实,本来我不想说什么,只是看到你的言论如此贬低程序员,让人恼火。但是我相信,如果你写的代码不少的话 ,instance of,是不是经常出现,还有那个if else?
要不就是,或者本来只需要1,2个类就搞定的事情,你是不是加上一大堆抽象类,接口,缺省实现类?!大量的if else 或者过度设计带来的众多烦恼都应该是考虑的。最后一贴,不说了。
从我的项目经验来说,很少有把ArrayList改成Vector或者其他List实现的情况,不过也并没有因为使用List而使用instanceof,之所以用List,是因为觉得“针对接口编程”是个好的编码和设计实践,也是我的编码习惯。
尽管使用List虽然没有很明显的体现出“针对接口编程”的好处,不过这种编码实践也没有给我带来instanceof的烦恼,所以我还是建议用List,毕竟这种方式符合“针对接口编程”这种编码实践,而且养成“针对接口编程”也是很重要的。
private List abc = new ArrayList(); 这一句说的就是List是ArrarList的基础类,所以用基础类的类型来定义完全可以
这句表达就是直接具有了基础类的特征。