如果我写这段代码:
Document d = searcher.doc(docId);
d.get("latitude")
我得到了
unreported exception ... must be caught or declared to be thrown
如果我写这个,
try {
Document d = searcher.doc(docId);
}
d.get("latitude")
我显然得到了:
cannot find symbol
symbol : variable d
如果我写这个
Document d;
try {
d = searcher.doc(docId);
}
d.get("latitude");
我明白了:
variable d might not have been initialized
由于我不想将try / catch扩展到所有文档,我该如何解决这个问题?
感谢
答案 0 :(得分:4)
Document d = null;
而不仅仅是
Document d;
尽管如此,当你使用d
时,你不得不担心NullPointerException答案 1 :(得分:3)
尝试:
Document d = null;
try {
d = searcher.doc(docId);
d.get("latitude");
}
答案 2 :(得分:2)
你做的是消息所说的: 只需在开头使用null初始化变量“d”:
Document d = null;
try {
d = searcher.doc(docId);
}
d.get("latitude");
无论如何,要小心!如果发生异常,您的“d”变量将为null,您将获得一个未设置异常的对象引用!
在try块中包含d.get("latitude");
或在调用该行之前检查null。
答案 3 :(得分:1)
您应该初始化变量并捕获异常(您可以根据需要更改异常名称并获取消息级别)。
Document d = null;
try {
d = searcher.doc(docId);
d.get("latitude");
} catch (Exception ex){
ex.getMessage();
}
答案 4 :(得分:0)
应该是:
Document d = null;
try {
d = searcher.doc(docId);
} catch (Exception e) {
//...
}
d.get("latitude");
答案 5 :(得分:0)
你可以把它初始化为null,但在我看来你不应该这样做。
如果方法抛出异常,则d == null,因此您需要使用if (d != null)
来处理该情况,或者只需要在try块内处理范围d。
我会做后者。
答案 6 :(得分:0)
如果catch导致方法的其余部分跳过(通过return或throw语句),或者如果在catch中初始化d,则不应该出现此错误。
Document d;
try {
d = searcher.doc(docId);
} catch (SomeException e) {
return null;
//throw new RuntimeException(e);
//d = some default value
}
d.get("latitude");
刚刚初始化d = null只会在异常发生时导致空指针(模糊实际原因)。