首页 > 解决方案 > Java - 将空引用传递给构造函数的对象并稍后创建实例

问题描述

我必须创建对象 Th 的“循环列表”。T0,T1,T2,..,TN-1 每个对象都拥有一个对它的引用所以 T0 有 T1 引用 .... 并且 TN-1 有 T0 引用。

class Th
{
    private Th nextTh;
    Th(Th n) {
        nextTh=Th;
    }
}

在主要方法中,我这样做

 Th[] th = new Th[N]; //Create the references
 for (int i = 0; i < N; i++)
     th[i]= new Th(th[(i+1)%(N)],first,shared,i,N,counter); 

如您所见,当 i=0 在 for 循环中创建新对象 Th 并在构造函数中传递参数th[i+1](so th[1]) 时,该参数目前是对空对象的引用,但我在下一步创建它我=1。事实上,当我在 Th 类中引用 nextTh 时,我得到了NullPointerException.

class Th {
     ....
    doSomething() {
        nextTh.foo(); //Throws NullPointerException
    }
}

我知道 Java 只是按值传递参数,它从原语制作一个副本,而对于 Object,它传递“引用的副本(对吗?)。

谢谢你。

标签: javareference

解决方案


像下面这样写你的主要方法

    // N = 30, just for testing
    final int N = 30;
    Th[] thArr = new Th[N];

    // first element
    Th th0 = new Th(null, 0);
    // initialize first element into array
    thArr[0] = th0;
    // general element
    Th thNext;

    // loop
    for (int i = 1; i < N; i++) {
        thNext = new Th(null, i);
        thArr[i - 1].nextTh = thNext;
        thArr[i] = thNext;
    }
    // setting next element of last element to first element
    thArr[N - 1].setNextTh(th0);

推荐阅读