java - 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,它传递“引用的副本(对吗?)。
谢谢你。
解决方案
像下面这样写你的主要方法
// 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);
推荐阅读
- reactjs - 客户端渲染和 API 安全
- entity-framework - 适用于 Visual Studio 2019 的实体框架 DTO 生成器
- c# - 组合框获取选定的框项?
- r - 安装 tdplyr 包失败。错误:参数不是环境
- javascript - 角度 clickOutside 指令不起作用
- javascript - 使用 uniqid() 文件名在 file_put_contents 上重复
- javascript - 这个循环和返回数据的更好解决方案?Javascript
- pandas - 使用 pandas 规范化数据
- python - “非零退出状态 1”由于使用 pypdftk 在 Windows 开发服务器上的虚拟环境中的 Django 项目中填写 pdf 表单时找不到 pdf 文件
- javascript - 快递验证器无效电子邮件