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

时间:2016-01-19 00:35:44

标签: java vector this

我试图在不使用Vector类中的构造函数参数的情况下更改向量的容量。所以我创建了一个MyVector类,并从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 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;
    }
}  

2 个答案:

答案 0 :(得分:2)

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

如果您执行capacityIncrement = capacityIncrement;,则会为capacityIncrement参数指定相同的值,这将无效。

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

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

根据您的修改,在capacityIncrement类中设置MyVector字段也是一个坏主意,因为父Vector中已存在具有相同名称的受保护变量

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

答案 1 :(得分:0)

当你使用&#34;这个&#34;你指的是班级的对象。 因此,this.capacityIncrement指的是从其调用的向量类tat的对象中的变量capacityIncrement。请注意,传递给方法的参数也称为capacityIncrement。所以,如果你刚写, capacityIncrement = capacityIncrement没有&#34; this。&#34;编译器只是假设您引用了局部变量,即参数。

变量capacityIncrement是vector类中的受保护变量。这意味着只有矢量类或扩展矢量类的类才能直接访问它。