[英]How to access the variables in a nested class with array object?
所以我有一個對象數組,我試圖訪問嵌套類中的變量。 我得到一個空指針異常。 新手在這里,所以我接近這個問題的方式可能是錯的。
foo Foo = new foo();
Foo.initcfoo(1);
Foo.cfoo[0].a = 1;
public class foo {
childfoo[] cfoo;
public void initcfoo(size){
cfoo = new childfoo [size];
}
public class childfoo{
public int a,b,c;
}
}
您已初始化陣列,但未初始化其成員。 改成
public void initcfoo(size){
cfoo = new childfoo [size];
for (int i = 0; i < cfoo.length; i++) {
cfoo[i] = new childfoo();
}
}
考慮使用Java命名約定。 使用大寫字母啟動類名。 將camelCase
用於變量和方法名稱。
當你不這樣做時,聲明
Foo.cfoo[0].a = 1;
嘗試訪問索引0處的元素,但該元素尚未初始化,因此為null
。 試圖取消引用null
,以訪問現場a
拋出一個NullPointerException
。
這行cfoo = new childfoo [size];
只是初始化數組(意味着數組的大小size
將保存對象childfoo
任何實例),但數組仍然是空的,並且它沒有任何內容。
但在使用childfoo
實例填充數組之前,您正在訪問它Foo.cfoo[0].a
,這會導致Null Pointer Exception
意味着Foo.cfoo[0]
為null
。
解決方案是首先使用childfoo
的對象填充數組,然后訪問它。
例如
cfoo[0] = new childfoo()
然后cfoo[0].a
你可以了解更多有關java數組的信息
請尊重java中的命名約定,並嘗試不直接訪問類的變量(除了從類本身或其中一個內部類)
使用setter和getters,如:
public class Foo {
// private variables
private ChildFoo[] cFoo;
// setter
public void setCFoo(Foo.ChildFoo[] cFoo) {
this.cFoo = cFoo;
}
// getter
public Foo.ChildFoo[] getCFoo() {
return cFoo;
}
public void initCFoo(int size) {
cFoo = new ChildFoo[size];
for (int i = 0; i < cFoo.length; i++) {
cFoo[i] = new ChildFoo();
}
}
public class ChildFoo {
// private variables
private int a, b, c;
// setter
public void setA(int a) {
this.a = a;
}
// getter
public int getA() {
return a;
}
public void setB(int b) {
this.b = b;
}
public int getB() {
return b;
}
public void setC(int c) {
this.c = c;
}
public int getC() {
return c;
}
}
}
Foo foo = new Foo();
foo.initcFoo(1);
foo.getCFoo()[0].setA(1);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.