这段代码中"this"的含义是什么?

Ana*_*vic 11 java oop

 public boolean contains(Object o) {
    for (E x : this)
        if (x.equals(o))
            return true;
    return false;
}
Run Code Online (Sandbox Code Playgroud)

有人能告诉我这段代码中有什么令人兴奋的意思吗?没有这个可以写它怎么样?

Psh*_*emo 22

这里this表示调用当前方法的对象.例如,如果你有a.contains(x)内部contains方法this将返回对a引用变量中保存的同一对象的引用.

由于您可以this在for-each中使用它意味着该contains方法被放置在实现Iterable<E>接口的类中,因为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;
}
Run Code Online (Sandbox Code Playgroud)

但这意味着你需要以某种方式调用这样的方法,a.contains(a,x)因此它需要重复a两次(更不用说它可以让我们传递我们类的其他实例而不是aa.contains(b,x)).

为了避免这种重复,我们可以制作允许通过它调用它的contains方法.但是这样我们需要从一个基本的OOP概念 - 多态 - 辞职,因为它不适用于方法.staticYourClass.contains(a,x)static

编译器使用第一个解决方案来解决它,所以它编译我们的方法就像编写它们一样(我们实际上可以用这种方式编写方法)

public boolean contains(YourClass this, Object o) {
//                      ^^^^^^^^^^^^^^
    ...
}
Run Code Online (Sandbox Code Playgroud)

然后当我们编写a.contains(x)它时,就像我们要调用一样编译它a.contains(a,x).

  • 主要关于参数列表中包含的`this`参数的upvote.不知道你能做到这一点 (3认同)

Era*_*ran 5

this是包含contains()方法的类的对象.它指的是执行该方法的该类的对象.

将它放在:增强的for循环之后意味着包含此方法的类必须实现Iterable<E>,因为增强的for循环可用于迭代实现Iterable接口的类或实例.这意味着您的类能够迭代某些E元素集合.E可能是泛型类型参数.

为了编写你的方法this,你必须提供一个实现的替代对象的引用Iterable<E>,但我没有看到这样做的意义.