java - 此代码中 "this"的含义?

标签 java oop

 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两次(更不用说它可以让我们传递我们类的其他实例而不是 aa.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/

相关文章:

java - 二叉搜索树 toString

java - Java Spring 中是否有方法的注释可以用作触发器?

java - 如何修复此运行时错误?

ruby-on-rails - Rails - 参数数量错误(2 个代表 0..1)错误

java - 类 创建方法时的返回类型

Java - 从 jre 1.6 更改为 1.7 DocumentBuilderFactory 失败时

java - 我如何使用通用存储库包装 Play/JPA 的模型类?

java - 从正在运行的任务中关闭 ExecutorService

Python 重载 __init__

java - 只能从数组中索引 0 处删除对象