在方法内部使用 "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 可以直接访问它。
我试图在不使用 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 可以直接访问它。