[英]What does "this" refer in generic subclass in java?
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) {
}
}
}
所以基本上,這是我未完成的測試項目類,我真的很困惑我真的應該使用什么來將參數傳遞給變量。
正如我在代碼中指出的,我想知道使用“this”函數和不將“this”函數放在前綴上的區別。
例如,在評論的第 1 條中,如果我將其更改為下面的評論會發生什么:this.element?
也和2號和3號一樣,我應該用這個嗎? 而不僅僅是元素?
或者這是否與不使用它一樣工作,無論在這種情況下是什么?
在這種情況下,它不會改變任何東西。 因為您的方法參數和類屬性具有不同的名稱。 這個關鍵字的原因是為了避免通過本地方法屬性隱藏類屬性。
這個例子應該解釋一下:
這會將方法參數分配給自身,因此 Node.element 不會被初始化。
public Node (E element) {
element = element;
}
這會將方法參數元素分配給 Node.element 屬性,因此該屬性將被初始化。
public Node (E element) {
this.element = element;
}
數字(1)和(2),沒有區別。 引用成員變量時,可以使用this.
使其更加明確。
數字(3),如果你使用this.element = element
就會有問題,因為這相當於做this.element = this.element
,所以你從來沒有真正將參數分配給字段。
在這種情況下, this
用法與泛型無關。
如果你有一些“陰影”你的領域,你只需要使用this.element
而不是 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?
}
是的。 您將字段分配給自身,因此這將是一個錯誤。
例如,在評論的第 1 條中,如果我將其更改為下面的評論會發生什么:this.element?
技術上沒有什么不同。
也和2號和3號一樣,我應該用這個嗎? 而不僅僅是元素?
從技術上講,這沒有區別。
實際上,作為一種風格,我更喜歡在提到字段時總是使用this
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.