簡體   English   中英

java中的泛型子類中的“this”指的是什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM