public boolean contains(Object o) {
for (E x : this)
if (x.equals(o))
return true;
return false;
}
谁能告诉我这段代码中“this”的确切含义是什么?没有这个我可以写吗?如何写?
最佳答案
在这里this
表示调用当前方法的对象。例如,如果你有 a.contains(x)
然后里面 contains
方法 this
将返回对 a
中持有的同一对象的引用引用变量。
因为你能够使用 this
在 for-each 中,这意味着 contains
方法放在实现 Iterable<E>
的类中接口(interface),因为 for-each 只能迭代:
- 像
String[] array = ...; for(String s : array){...}
这样的数组 - 实现
Iterable<E>
的类实例喜欢List<String>
我们可以在哪里写for(String s : list){...}
避免this
您可以显式添加到包含此方法的类的方法参数中,例如
public boolean contains(YourClass yc, Object o) {
//and use that parameter in loop instead of `this`
for (E x : yc)
if (x.equals(o))
return true;
return false;
}
但这意味着您需要以某种方式调用此类方法 a.contains(a,x)
所以它需要重复 a
两次(更不用说它可以让我们传递我们类的其他实例而不是 a
像 a.contains(b,x)
)。
为了避免这种重复,我们可以制作contains
方法 static
这将允许通过 YourClass.contains(a,x)
调用它.但是通过这种方式,我们需要放弃基本的 OOP 概念之一——多态性——因为它不适用于 static
。方法。
编译器使用第一个解决方案来解决它,因此它像编写方法一样编译我们的方法(我们实际上可以这样编写方法)
public boolean contains(YourClass this, Object o) {
// ^^^^^^^^^^^^^^
...
}
然后当我们写a.contains(x)
它被编译为好像我们会调用 a.contains(a,x)
.
关于java - 此代码中 "this"的含义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44095724/