import java.util.ArrayList;
class Tree<E> {
private class Node<E> {
private ArrayList<Node<E>> list = new ArrayList<Node<E>> ();
private Node<E> parent = null;
private E element = null;
public Node (E e, Node<E> p) {
element = e; // (1)
//this.element = e; <- difference?
parent = p;
}
public Node (E e) {
element = e; // (2)
//this.element = e; <- difference?
}
public void setElement (E e) {
element = e; // (3)
//this.element = element; <- difference?
}
public E getElement () {
return element;
}
public void addChild (E e) {
Node<E> node = new Node<E> (element);
}
public void addParent (Node<E> node) {
parent.addParent(this);
this.parent
}
public void getChildren (Node<E> node) {
}
}
}
所以基本上,这是我未完成的测试项目类,我真的很困惑我应该使用什么来将参数传递给变量。
正如我在代码中指出的那样,我想知道使用&#34;这个&#34;功能,而不是把这个&#34;这个&#34;函数在前缀上。
例如,在评论的第1号中,如果我将其更改为以下评论会发生什么:this.element?
与2号和3号相同,我应该使用它吗?而不只是元素?
或者这种方式与不使用它一样,无论在什么情况下都是这样?
答案 0 :(得分:0)
在这种情况下,它不会改变任何东西。因为您的方法参数和类属性具有不同的名称。此关键字的原因是通过本地方法属性避免hiding class property。
这个例子应该解释一下:
这会将方法参数分配给自身,因此Node.element不会被初始化。
public Node (E element) {
element = element;
}
这会将方法参数元素分配给Node.element属性,因此将初始化此属性。
public Node (E element) {
this.element = element;
}
答案 1 :(得分:0)
数字(1)和(2),没有区别。在引用成员变量时,您可以使用this.
使其更明确。
数字(3),如果您使用this.element = element
,则会遇到问题,因为这相当于执行this.element = this.element
,因此您永远不会将参数实际分配给字段。
答案 2 :(得分:0)
在这种情况下,this.element
的使用与泛型无关。
如果你的字段有“阴影”,你只需要使用 public void setElement (E element) {
this.element = element;
}
而不是元素。例如:
element = element;
显然,你不能写 public Node (E e, Node<E> p) {
element = e; // (1)
//this.element = e; <- difference?
parent = p;
}
。
现在回答你的问题:
public Node (E e) {
element = e; // (2)
//this.element = e; <- difference?
}
没有
public void setElement (E e) {
element = e; // (3)
//this.element = element; <- difference?
}
没有
this
是。您将字段分配给自己,这将是一个错误。
例如,在评论的第1号中,如果我将其更改为以下评论会发生什么:this.element?
技术上没什么不同。
与2号和3号相同,我应该使用它吗?而不只是元素?
从技术上讲,这没什么区别。
实际上,作为一种风格问题,当我引用字段时,我更喜欢总是使用 int seed = time(NULL);
srand(seed);
。