Java中LinkedList处使用泛型的Null指针异常

Java中LinkedList处使用泛型的Null指针异常,java,Java,在“添加方法”中,您可以执行以下操作: public class Point { double x; double y; public Point(double x,double y) { this.x=x; this.y=y; } public String toString() { return "("+Double.toString(x) + " , " + Double.toString(y) +

在“添加方法”中,您可以执行以下操作:

public class Point {
    double x; 
    double y;
    public Point(double x,double y) {
        this.x=x;
        this.y=y;
    }
    public String toString() {
        return "("+Double.toString(x) + " , " + Double.toString(y) + ")";
    }
}
但最后一个从未初始化。它总是空的,所以第一个总是空的

调用get方法时,您需要执行以下操作:

if (first==null) first=last;
由于第一个值为null,因此会得到NullPointerException

查看代码的这一部分:

first=first.next;

最后一个未设置。它将始终为空。所以first总是空的。当你打电话到这里:

public void add(E element) {
    Entry<E> e = new Entry(element, null);
    if (last != null) { last.next = e; }
    last = e;
    if (first == null) first = last;
}
您正试图从空对象获取下一个值。

您的变量最后一个和第一个从未初始化:

public E get() {
   Entry<E> temp=first;
   first=first.next;
   return temp.data;
}

请添加异常堆栈跟踪,并在代码中标记获取异常的行。请在问题中添加更多文本。对于您的问题,几乎没有什么解释。您错过了Entry First的实例化,以及为什么如果我们在add方法中指定last,它会工作,但当我们将它传递给Entry时,它会变为null?还是我缺少smt?这是因为在Java中,变量是引用,但不是通过引用传递方法参数,而是通过值传递。因此,当您修改为时,您将更改由“到”引用的对象,但最后一个对象不变。在这个答案中,您可以找到一个很好的解释:但是to指的是与last相同的对象。在add method Entry e=new Entryelement中,last传递对last指向的对象的引用,并将其接受???最初,last和to引用同一个对象,但它们是不同的变量。当您这样做时,它们不再引用相同的对象。您没有修改引用的对象。您正在将变量的值修改为,以便它引用另一个对象。变量last保持不变。
public Entry(E element,Entry<E> to) {
    data=element;
    next=to;
    to=this;
}
public void add(E element) {
    Entry<E> e = new Entry(element, null);
    if (last != null) { last.next = e; }
    last = e;
    if (first == null) first = last;
}
public E get() {
   Entry<E> temp=first;
   first=first.next;
   return temp.data;
}
Entry<E> first;
Entry<E> last;
first=first.next;