'this'关键字在DataStructureIterator iterator = this.new EvenIterator()的上下文中引用的是什么

时间:2016-01-05 12:10:34

标签: java this

我是Java的新手,下面的代码来自Java教程Oracle。

我对两个问题感到困惑

1)有人可以告诉我“this”关键字在

的上下文中指的是什么
DataStructureIterator iterator = this.new EvenIterator();

我从声明中删除了'this'关键字,一切似乎都运行正常。 'this'关键字是否为某些我不知道的特殊功能提供服务或者它是多余的?

2)

有什么用?
interface DataStructureIterator extends java.util.Iterator<Integer> { }

真的有必要吗?因为我已经从代码中删除了它(以及一些小的相关更改),一切正常。

public class DataStructure {

    // Create an array
    private final static int SIZE = 15;
    private int[] arrayOfInts = new int[SIZE];

    public DataStructure() {
        // fill the array with ascending integer values
        for (int i = 0; i < SIZE; i++) {
            arrayOfInts[i] = i;
        }
    }

    public void printEven() {

        // Print out values of even indices of the array
        DataStructureIterator iterator = this.new EvenIterator();
        while (iterator.hasNext()) {
            System.out.print(iterator.next() + " ");
        }
        System.out.println();
    }

    interface DataStructureIterator extends java.util.Iterator<Integer> {
    }

    // Inner class implements the DataStructureIterator interface,
    // which extends the Iterator<Integer> interface
    private class EvenIterator implements DataStructureIterator {

        // Start stepping through the array from the beginning
        private int nextIndex = 0;

        public boolean hasNext() {

            // Check if the current element is the last in the array
            return (nextIndex <= SIZE - 1);
        }

        public Integer next() {

            // Record a value of an even index of the array
            Integer retValue = Integer.valueOf(arrayOfInts[nextIndex]);

            // Get the next even element
            nextIndex += 2;
            return retValue;
        }
    }

    public static void main(String s[]) {

        // Fill the array with integer values and print out only
        // values of even indices
        DataStructure ds = new DataStructure();
        ds.printEven();
    }
}

1 个答案:

答案 0 :(得分:2)

DataStructureIterator扩展java.util.Iterator<Integer>而不添加任何新方法。因此,使用它的任何地方都可以安全地替换为java.util.Iterator<Integer>

this中的this.new EvenIterator()引用当前DataStructure实例,该实例充当在该语句中实例化的内部EvenIterator类实例的封闭实例。由于您是在封闭类EvenIterator的实例中创建DataStructure的实例,因此无需明确指定它,new EvenIterator()可以正常工作。