[英]Is the keyword 'this' needed when instantiating a new inner class?
Oracle Java SE教程的另一个例子。 它工作正常,但我不确定在创建内部类的实例时是否/为什么'这'是必要的。 无论我是否把它取出,结果似乎都是一样的。
要清楚,我指的是:InnerEvenIterator iterator = this.new InnerEvenIterator(); //不确定为什么要使用'this'
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() {
// prints out the value of even indices in the array
InnerEvenIterator iterator = this.new InnerEvenIterator(); // not sure why using 'this'
while (iterator.hasNext()) {
System.out.println(iterator.getNext() + " ");
}
}
// inner class implements the Iterator pattern
private class InnerEvenIterator {
// start stepping through the array from the beginning
private int next = 0;
public boolean hasNext() {
// check if a current element is the last in the array
return (next <= SIZE - 1); // -1 b/c dealing with array's length.
}
public int getNext() {
// record a value of an even index of the array
int retValue = arrayOfInts[next];
// get the next even element
next += 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();
}
}
你不需要this.
, 在这种情况下。 但是,必须始终使用封闭实例构造内部类,因此这样this.
简单地向读者说清楚。
如果你的非静态方法里面不是DataStructure
(即,如果this
不存在的,要不然不是一个实例DataStructure
),那么你实际上必须指定的实例DataStructure
创建时InnerEvenIterator
:
InnerEvenIterator iterator = dataStructure.new InnerEvenIterator();
只是添加一点来纠正上面提到的答案:
当你有一个函数时,让我们说setInnerEvenIterator(InnerEvenIterator)
,如下所示
class DataStructure {
InnerEvenIterator iterator;
public void setInnerEvenIterator(InnerEvenIterator iterator) {
this.iterator = iterator;
}
}
那么你需要指定this
关键字来纠正由于相同的参数和实例名称可能产生的冲突。 所以this.someThing
表示类的实例变量。 如果你没有明确地提供一个,只要不存在冲突的情况就可以了。
非静态内部类绑定到封闭外部类的实例。
扩展内部类依赖于外部类的想法。
静态内部类与所有其他静态资源一样,属于外部类。
与所有其他非静态资源一样,非静态内部类属于外部类的“this”实例。
现在它只是为了可读性,如果您决定使用'this',以防Outer Class的实例默认可用。
例:
OuterClass.InnerClass in = new OuterClass.InnerClass(); //static inner
OuterClass.InnerClass in = outerClass.new InnerClass(); //non- static inner
// outerClass is an instance of OuterClass
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.