我有这样一个类:
MainActivity.java
public class MainActivity extends FragmentActivity {
/* I removed other methods */
public Map<String, Conversation> conversationsMap = new LinkedHashMap<>();
}
和Connection.java
public class Connection {
/* I removed other methods */
public class TestMessageListener implements MessageListener {
MainActivity mainClass;
public void someMethod() {
mainClass.conversationsMap.get("test"); /// This line is returning nullpointer exception
}
}
}
为什么我不能从另一个类访问 conversationsMap
?
最佳答案
MainActivity mainClass;
是嵌套类 TestMessageListener
的一个字段,因此如果您不初始化它,它将使用默认值初始化,引用为 null
这意味着
mainClass.conversationsMap.get("test");
将尝试在 null 上调用 conversationsMap.get("test")
,但由于 null
没有任何字段或方法,您将收到 NullPointerException。
通常要解决此类问题,您可以使用新实例自己初始化 mainClass
MainActivity mainClass = new MainActivity();
但可能更好的选择是让用户或其他进程将已创建的实例传递给 TestMessageListener
类。为此,您可以创建 setter,
public void setMainActivity(MainActivity mainClass){
this.mainClass = mainClass;
}
或者在TestMessageListener
构造函数中接受MainActivity
public TestMessageListener(MainActivity mainClass){
this.mainClass = mainClass;
}
我不是 Android 开发人员,所以他们可以提供更好的方法,比如从某种已注册的 Activity
容器中获取此实例,但在这种情况下我帮不了你。
关于java - 从java中的另一个类访问变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27681826/