001/*
002 *  This file is part of the Jikes RVM project (http://jikesrvm.org).
003 *
004 *  This file is licensed to You under the Eclipse Public License (EPL);
005 *  You may not use this file except in compliance with the License. You
006 *  may obtain a copy of the License at
007 *
008 *      http://www.opensource.org/licenses/eclipse-1.0.php
009 *
010 *  See the COPYRIGHT.txt file distributed with this work for information
011 *  regarding copyright ownership.
012 */
013package org.jikesrvm.util;
014
015import java.util.Iterator;
016import java.util.NoSuchElementException;
017
018/**
019 * A generic iterator containing no items.<p>
020 *
021 * NOTE: This class is only necessary until Java 7. Java 7's Collections
022 * class provides an {@code emptyIterator()} method.<p>
023 *
024 * TODO Remove this class when we require Java 7 to build and all supported
025 * class libraries support Java 7.
026 */
027public final class EmptyIterator<T> implements Iterator<T> {
028
029  @SuppressWarnings("unchecked")
030  private static final EmptyIterator<?> INSTANCE = new EmptyIterator();
031
032  /**
033   * Clients must use {@link #getInstance()} to obtain an instance.
034   */
035  private EmptyIterator() {
036  }
037
038  @Override
039  public boolean hasNext() {
040    return false;
041  }
042
043  @Override
044  public T next() {
045    throw new NoSuchElementException();
046  }
047
048  @Override
049  public void remove() {
050    throw new IllegalStateException();
051  }
052
053  @SuppressWarnings("unchecked")
054  public static <U> Iterator<U> getInstance() {
055    return (Iterator<U>) INSTANCE;
056  }
057}