此关键字不代表对象

Ste*_*ong 5 java

有谁知道为什么我们可以在此处(在subsetOf方法中)遍历“ this”关键字?据我所知,这表示一个JAVA对象。欢迎进行一些广泛的解释,以了解为什么“ this”可以这种方式工作。

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

Ful*_*Guy 8

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

因此,您的类的继承层次结构如下:

 Iterable
    ^
    |
Collection
    ^
    |
   Set
    ^
    |
ArrayListSet
Run Code Online (Sandbox Code Playgroud)

此外,this关键字始终引用当前实例。在当你执行你的代码subsetOf()this会指向的一个实例ArrayListSet(这是用来调用subSetOf()方法),这是一类Iterable通过继承,所以你可以在一个for-each循环使用。

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

随着Iterable接口的实现,需要一种iterator()返回Iterator对象实例的方法。该Iterator对象将被for-each循环被用于迭代的元素ArrayListSet

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

要在for-each循环中使用任何对象:

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

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

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


Mic*_*ter 1

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