以下是我测试一些语法的代码。我想在try-block中返回一个对象并在finally块中执行一些操作。但是当我运行我的代码时,我得到NullPointException。原因是使用了ReentrantLock
,但我不知道为什么。
import java.util.concurrent.locks.ReentrantLock;
public class Main {
ReentrantLock lock;
public static void main(String[] args) {
try {
new Main().run();
} catch (Exception e) {
e.printStackTrace();
}
}
public void run() {
System.out.println(returnTest().get());
}
A returnTest(){
// lock.lock();
try {
return new A();
} finally {
// lock.unlock();
}
}
}
class A {
public boolean get() {
return true;
}
}
如果我取消注释lock.lock()
和lock.unlock()
,我将获得NullPointException。
为什么呢?
答案 0 :(得分:4)
因为ReentrantLock lock;
从不实例化/初始化。
在开头初始化它。
ReentrantLock lock = new ReentrantLock();
答案 1 :(得分:0)
您需要初始化 ReentrantLock 类
的对象做的:
ReentrantLock lock = new ReentrantLock();
答案 2 :(得分:0)
像这样初始化锁定变量:
'checking':{
type:String,
optional:true,
label:"Wheelchair Type",
autoValue:function(){
if(this.siblingField('type').value != "wheelchair"){
this.unset();
}
}
基本上抛出了NullPointException,因为lock是用null值初始化的,所以这就是你应该初始化的原因。