标签:类型 集合 ++ try 分享 建立 ash 直接 增加
一、
上一篇文章写了static的作用,其中有部分是介绍了内部类和静态内部类,下面就结合设计模式中的迭代器模式,介绍一下内部类的好处;
1.首先将内部类的作用说一下:
一、内部类可以直接访问外部类的东西,如果没有内部类,要实现迭代器模式,有2种方式,第一,在容器类中定义一些方法,那就需要定义一些全局成员变量来记录光标等等一些数据,导致容器类繁杂,不易扩展。第二,与容器类平级建立一个迭代器类,这就需要类与类之间的通信,提升了容器类与迭代器类之间的耦合度。
而,内部类,可以直接访问到容器类的成员变量与成员函数,内部类只需实现自己的方法即可。
还有一个好处就是借鉴一位网友评论所讲的,比如ArrayList的内部类 ArrayIterator被其它类重复使用到的机会很少,这才导致他们将它设计成内部类,如果会被其它类大量重用,设计成内部类就不太好了,即使它有那么多“优点”。HashMap的内部类Entry就是典型的出于这个原因设计的,首先是它想要用外部类Entry都不行,已经存在同名的类了,而恰巧HashMap的Entry也基本只有HashMap自己会用,那就正好设计成内部类了。
2.迭代器模式的好处:
二、UML图
下面的代码是Java集合框架内部实现迭代器模式的精简版:
public interface Iterator<E> {//迭代器接口精简版 boolean hasNext(); E next(); }
public interface List<E> {//容器接口精简版 Iterator<E> iterator(); }
public class ArrayList<E> implements List<E> { private Object[] array; public ArrayList(){ this.array=new Object[5]; this.array[0]="a"; this.array[1]="b"; this.array[2]="c"; this.array[3]="d"; this.array[4]="e"; } public Iterator<E> iterator() { return new ArrayIterator(); } public class ArrayIterator implements Iterator<E>{ //内部类中实现了其他类接口,减少了耦合性 必须要实现Iterator要具备的方法 private int cursor=0; public boolean hasNext() { if(cursor<array.length){ //可以直接访问外部类的Object数组 return true; } return false; } @SuppressWarnings("unchecked") public E next() { E e=(E) array[cursor++]; return e; //直接返回外部类对应的数据 } } }
标签:类型 集合 ++ try 分享 建立 ash 直接 增加
原文地址:https://www.cnblogs.com/gxyandwmm/p/9484079.html