1 package net.sf.composite.util; 2 3 import java.lang.reflect.Array; 4 import java.util.Iterator; 5 import java.util.NoSuchElementException; 6 7 /*** 8 * An iterator over the contents of an array. This implementation only allows 9 * an array to be iterated over once, but a reset method could easily be added 10 * to allow for the array to be iterated over multiple times or for another 11 * array to use the same ArrayIterator instance as an iterator for it. 12 * 13 * @author Matt Sgarlata 14 * @since Dec 5, 2004 15 */ 16 public class ArrayIterator implements Iterator { 17 18 private int index; 19 private Object array; 20 21 public ArrayIterator() { 22 this.index = 0; 23 } 24 25 public ArrayIterator(Object array) { 26 this(); 27 setArray(array); 28 } 29 30 public boolean hasNext() { 31 if (array == null) { 32 return false; 33 } 34 return index < Array.getLength(array); 35 } 36 37 public Object next() { 38 if (array == null) { 39 throw new NoSuchElementException("The array was null, so there are no elements to iterate over"); 40 } 41 if (index == Array.getLength(array)) { 42 throw new NoSuchElementException("There are no more elements to iterate over"); 43 } 44 return Array.get(array, index++); 45 } 46 47 public void remove() { 48 throw new UnsupportedOperationException(); 49 } 50 51 /*** 52 * @return Returns the array. 53 */ 54 public Object getArray() { 55 return array; 56 } 57 /*** 58 * Sets the array to be iterated over 59 * @param array The array to set. 60 * @throws IllegalStateException if this method is called after a call has been made to next() 61 * @throws IllegalArgumentException if the supplied object is not an array 62 */ 63 public void setArray(Object array) { 64 if (index != 0) { 65 throw new IllegalStateException("Cannot change the array of an iterator that has already begun traversal"); 66 } 67 if (array != null && !array.getClass().isArray()) { 68 throw new IllegalArgumentException("The supplied array argument must be an array type, but '" + array.getClass().getName() + "' is not"); 69 } 70 this.array = array; 71 } 72 }