什么"这"在java中的泛型子类中引用?

时间:2017-10-11 07:17:59

标签: java generics this subclass

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号相同,我应该使用它吗?而不只是元素?

或者这种方式与不使用它一样,无论在什么情况下都是这样?

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);