![](/img/trans.png)
[英]Class/Activity instance passed as parameter is null when assigning it to a class-wide variable and using it
[英]array as instance variable passed as parameter
我有一個帶有數組的類作為實例變量/字段,它從另一個類傳遞到該實例中的第一個方法。 我的印象是,我也應該能夠從另一種方法訪問它,而不必也將其傳遞給該方法,但是當我嘗試時,我得到了NPE。
這是代碼:
public class PLoop {
// instance variable
public Memory[] memList;
// method 1
public void memPass(Memory[] memLocList) {
memList = memLocList;
System.out.println(memList.length);
}
// method 2
public void accessArray() {
System.out.println(memList.length);
}
}
當第一個方法被調用時,我得到一個打印到控制台的整數,表示數組的長度,但是當第二個方法被調用時,它是NPE,表明不是同一數組。
通過單擊GUI上的按鈕來調用第二種方法。 與此按鈕關聯的方法只能通過以下方式進行調用:
PLoop.accessArray();
誰能告訴我我在做什么錯?
-EDIT-對這些方法的調用來自兩個不同的類,每個類都聲明一個PLoop實例:
proc = new PLoop();
我強烈懷疑您調用memPass
的實例與您稍后調用accessArray
實例accessArray
。
如果您使用的是同一個實例,那應該沒問題。 (尤其是要存儲的參數的值 ,所以這並不memList
可以在不為null后僅由於其他地方的更改而變為null。)
您所顯示的類中的代碼看起來不錯,因此,如果獲取的是NPEx,則要么順序調用方法,要么在與第一個PLoop不同的實例上進行第二個方法調用。
要檢查調用是否在同一個對象上進行,請嘗試在方法內部打印出this
的值,並檢查值是否相同:
System.out.println(this);
PLoop類中的方法不是靜態的。您仍然在調用PLoop.accessArray();
你能告訴我真正的情況是什么嗎?
就像@Jon Skeet告訴代碼似乎很好一樣,唯一的可能是您可能不按順序執行它們,或者在調用第一個方法后可能會混淆memLocList。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.