此关键字不表示对象



>有谁知道为什么我们可以在这里循环访问"this"关键字(在subsetOf 方法中(?据我所知,这代表了一个 JAVA 对象。欢迎一些广泛的解释,想知道为什么"这个"可以以这种方式工作。

public class ArrayListSet<E> implements Set<E> {
private ArrayList<E> elements;
public ArrayListSet() {
elements = new ArrayList<>();
}
@Override
public void add(E e) {
if (!elements.contains(e))
elements.add(e);
}
@Override
public void remove(E e) {
elements.remove(e);
}
@Override
public boolean contains(Object e) {
return elements.contains(e);
}
@Override
public int size() {
return elements.size();
}
@Override
public boolean subsetOf(Set<?> other) {
for (E e : this) {
if (!other.contains(e))
return false;
}
return true;
}
}

您正在声明一个实现Set接口的类,该接口本身通过Collection接口扩展了Iterable。任何作为Iterable接口实现的对象都可以在 for-each 循环中使用。

因此,继承层次结构适用于您的类:

Iterable
^
|
Collection
^
|
Set
^
|
ArrayListSet

此外,this关键字始终引用当前实例。在代码中执行subsetOf()时,this将指向ArrayListSet的实例(用于调用subSetOf()方法(,该实例是一种通过继承Iterable,因此您可以在 for-each 循环中使用它。

此外,由于您正在实现Set因此您需要提供Set接口中定义的Iterator<E> iterator();方法的实现,以使其成为Iterable

由于Iterable接口的实现需要一个返回Iterator对象的实例的iterator()方法。for-each 循环将使用Iterator对象来迭代ArrayListSet的元素。

iterator()方法返回的Iterator类型的实现实际上定义了 for-each 循环使用的迭代逻辑。

要在 for-each 循环中使用任何对象,请执行以下操作:

第 1 步:直接或通过其他Iterable类型扩展Iterable

步骤 2:提供从Iterable接口继承的Iterator iterator()方法的实现。

步骤 3:实现Iterator并从iterator()方法返回其实例。

您可以遍历它,因为它表示一个集合。该集合是可迭代的。因此,它是有效的语法。

最新更新