职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 1189|回复: 9

JDK1.6某些Interface设计不是最优。。

[复制链接]
北大青鸟 发表于 2011-9-3 10:08 | 显示全部楼层 |阅读模式
JDK 1.6

集合类的接口设计实在是有点不合理。



public interface Iterable<T> {  


需要实现的方法有一个。
Iterator<T> iterator();


Collection 这个接口继承了它


public interface Collection<E> extends Iterable<E> {  

但是Collection接口的声明里 还有这个方法Iterator<E> iterator();

接着
List这个借口继承了 Collection


public interface List<E> extends Collection<E> {  


里面很多声明的方法都是在Collection里声明过的
比如:int size();
boolean isEmpty();
Iterator<E> iterator();


既然用继承为就应该充分利用啊。


fl 发表于 2011-9-3 10:08 | 显示全部楼层
貌似是因为这些接口方法上的javadoc不同...

爱车车 发表于 2011-9-3 10:08 | 显示全部楼层
。。。

第一、可以让代码更好读
第二、List的DOC和Collection不同
第三、说明行为的不同。

继承只是为了更好的兼容,子接口会满足父接口的行为。

Jethro 发表于 2011-9-3 10:08 | 显示全部楼层
Collection一开始就有 iterator()方法、继承 Iterable是1.5增强for循环的需要、之前是没有的。

hxy 发表于 2011-9-3 10:08 | 显示全部楼层
devworks 写道
Collection一开始就有 iterator()方法、继承 Iterable是1.5增强for循环的需要、之前是没有的。



开始我没有看明白,后来明白了!

LZ是说Collection没有必要在定义一次它父接口的方法,List也一样!

月上萧萧 发表于 2011-9-3 10:08 | 显示全部楼层
Just normal overriding
http://java.sun.com/docs/books/jls/second_edition/html/interfaces.doc.html

郁闷小男人 发表于 2011-9-3 10:09 | 显示全部楼层
劝楼主低调点啊,你考虑过API的向下兼容吗?

别把别人看轻咯~~~

只学java 发表于 2011-9-3 10:09 | 显示全部楼层
语言是不断发展的

有些设计 是早期的

后来又有新的替代设计,但为了满足以前的兼容性,这些“缺陷的设计”就永远遗留在jdk中了

难道你想在新版中删除掉旧的设计吗?那成千上万的客户的产品将不能运行在新版的jdk中..... 这个你有没考虑呢?

年轻人,低调点。。。你看到的只是表象。

紫衿 发表于 2011-9-3 10:09 | 显示全部楼层
楼主没做过产品

fl 发表于 2011-9-3 10:09 | 显示全部楼层
但是今天我也看到一个方法,ArrayList里的ensureCapacity
  
public void ensureCapacity(int minCapacity) {   
    modCount++;   
    int oldCapacity = elementData.length;   
    if (minCapacity > oldCapacity) {   
        Object oldData[] = elementData;   
        int newCapacity = (oldCapacity * 3)/2 + 1;   
            if (newCapacity < minCapacity)   
        newCapacity = minCapacity;   
            // minCapacity is usually close to size, so this is a win:   
            elementData = Arrays.copyOf(elementData, newCapacity);   
    }   
    }  

public void ensureCapacity(int minCapacity) {
        modCount++;
        int oldCapacity = elementData.length;
        if (minCapacity > oldCapacity) {
            Object oldData[] = elementData;
            int newCapacity = (oldCapacity * 3)/2 + 1;
                if (newCapacity < minCapacity)
                newCapacity = minCapacity;
            // minCapacity is usually close to size, so this is a win:
            elementData = Arrays.copyOf(elementData, newCapacity);
        }
    }

我就没弄明白Object oldData[] = elementData;这行是干嘛的
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-5-3 12:31 , Processed in 0.151922 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表