![](/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.