在方法内部使用 "this"(不用于调用方法或构造函数或变量)

Using "this" inside of a method (not for calling a method or constructor or variable)

我试图在不使用 Vector class 中的构造函数参数的情况下更改向量的容量。所以我创建了一个 MyVector class 并从 Vector 扩展了它。一切都在这段代码中工作,但我无法理解在 setCapacityIncrement(int capacityIncrement) 方法中使用 "this"。

public class App {
    public static void main(String [] args)
    {
        MyVector<Integer> v = new MyVector<>(4);

        System.out.printf("Capacity=%d%n", v.capacity());

        for (int i = 0; i < 5; ++i)
            v.add(i);

        System.out.printf("Capacity=%d%n", v.capacity());

        v.setCapacityIncrement(10);

        for (int i = 0; i < 5; ++i)
            v.add(i);

        System.out.printf("Capacity=%d%n", v.capacity());
    }
}

MyVector class :

class MyVector<T> extends Vector<T> {
    public MyVector()
    {
        super();
    }

    public MyVector(int capacity)
    {
        super(capacity);
    }

    public MyVector(Collection<? extends T> coll)
    {
        super(coll);        
    }

    public MyVector(int capacity, int capacityIncrement)
    {
        super(capacity, capacityIncrement);
    }

    public void setCapacityIncrement(int capacityIncrement)
    {
        this.capacityIncrement = capacityIncrement;
    }
}  

您需要 this.capacityIncrement,因为该字段被参数 capacityIncrement 隐藏,因为它们具有相同的名称。

如果你这样做 capacityIncrement = capacityIncrement; 你会为你的 capacityIncrement 参数分配相同的值,这不会有任何效果。

如果他们的名字不同,则不需要 this,如下所示:

public void setCapacityIncrement(int increment)
{
    capacityIncrement = increment;
}

根据您的编辑,在您的 MyVector class 中添加一个 capacityIncrement 字段也是一个坏主意,因为在parent Vector.

这会导致 Vector capacityIncrement 字段被您自己的字段遮蔽。

当您使用 "this" 时,您指的是 class 的对象。 因此,this.capacityIncrement 指的是向量 class 的对象中的变量 capacityIncrement,它是从中调用的。请注意,传递给该方法的参数也称为 capacityIncrement。所以如果你只是写, capacityIncrement = capacityIncrement 没有 "this." 编译器会假定您指的是局部变量,即参数。

变量 capacityIncrement 是向量 class 中的受保护变量。这意味着只有矢量 class 或扩展矢量 class 的 classes 可以直接访问它。