java - 这个关键字不代表一个对象
问题描述
有谁知道为什么我们可以在这里循环“this”关键字(在subsetOf方法中)?据我所知,这代表一个 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;
}
}
解决方案
您正在声明一个实现接口的类,该Set
接口本身Iterable
通过Collection
接口扩展。作为接口实现的任何对象Iterable
都可以在 for-each 循环中使用。
因此,您的类的继承层次结构是这样的:
Iterable
^
|
Collection
^
|
Set
^
|
ArrayListSet
此外,this
关键字始终指代当前实例。在您的代码中,当您执行时subsetOf()
,this
将指向一个实例ArrayListSet
(用于调用subSetOf()
方法),这是一种Iterable
通过继承,因此您可以在 for-each 循环中使用它。
此外,由于您正在实现 a Set
,因此您需要提供接口中Iterator<E> iterator();
定义的方法的Set
实现以使其成为Iterable
.
由于Iterable
接口的实现需要一个iterator()
返回Iterator
对象实例的方法。for-each 循环将Iterator
使用 Object 来遍历ArrayListSet
.
Iterator
从方法返回的类型的实现iterator()
实际上定义了 for-each 循环使用的迭代逻辑。
在 for-each 循环中使用任何对象:
第一步:Iterable
直接扩展或通过其他Iterable
类型扩展。
第 2 步:提供从接口Iterator iterator()
继承的方法的实现。Iterable
第 3 步:实现一个并从该方法Iterator
返回其实例。iterator()
推荐阅读
- java - 想要一个支持基于 BigDecimal 的自定义公式计算的 Maven 依赖项
- angular - 隐藏 PIN 文本字段编号 - IONIC 5
- haskell - Haskell 类型类的部分实例化
- c# - 如何将变量传递到 blazor 中组件的 @typeparam
- javascript - 在 javascript 中显示包含其 ISO8601 偏移量的小时数
- r - CIPS面板协整检验中的级数问题
- javascript - 如何选择具有在其值中包含引号的属性的 HTML 元素?
- python - 将多个值传递给sql语句
- python - Python Executable 无法执行脚本
- java - 没有输出