我提到this question,但它没有提供我所要求的内容。
我有一些全局声明的变量,最初它们被赋值为NULL。在构造函数内部,我调用一个名为"newGame()"
的函数,该函数初始化变量。在onDraw()
里面我试图绘制一个文本,其中包含我在newGame()
函数中初始化的变量之一的大小,当我运行应用程序时,它崩溃了,{{1} }说:logCat
。
所以,我认为,如果首先调用构造函数,我的变量应该已经初始化,因此不应该有NPE
。但是,因为有NPE
,似乎在构造函数之前调用NPE
,是真的吗?
Update_1
我还在onDraw()
内放置了newGame()
功能,但我收到了相同的onSizeChanged()
Update_2
我正在检查NPE
的对象是否为null,如下所示:
hashmap
检查对象是否为空是正确的吗?
Update_3
这是我如何初始化“手”
if (obj == null)
代码
if (hand == null) {
Log.i(TAG, "@dealCards: Hand hashMap was NULL, it will be initialised");
hand = new HashMap<Integer, Card>();
}
答案 0 :(得分:1)
<强>更新强>
看到你添加的代码,你在哪里初始化tableHand?
顺便说一句,最好将tableHand声明为Map而不是HashMap,并使用新的HashMap&lt;&gt;()初始化它。
毫无疑问,构造函数。如果该对象不存在,则不能在其上调用实例方法。
答案 1 :(得分:0)
为什么不尝试按照此设计确保正确启动变量
class Foo {
private static String GLOBAL_VAR = null ;
private String instanceVariable = null ;
static {
// here you can do complicated stuff
//in order to correctly initiate your variables.
GLOBAL_VAR = "FOO" ;
}// this block will run when the class is loaded
{
// here you can do complicated stuff
//in order to correctly initiate your variables.
instanceVariable = "foo" ;
}// this block will run before constructor.
Foo()
{
}//Constructor
static String getGlobalVar()
{
return GLOBAL_VAL ;
}
}