繁体   English   中英

关于尝试捕获声明的问题

[英]Question about try catch statement

如果我写这段代码:

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扩展到所有文档,我该如何解决此问题?

谢谢

Document d = null;

而不只是

Document d;

尽管那样的话,当您使用d时,稍后您将不得不担心NullPointerException的问题。

尝试:

Document d = null;
try {
   d = searcher.doc(docId);
   d.get("latitude");
}

您按照消息中的说明进行操作:只需在开头用null初始化变量“ d”:

Document d = null;
try {
  d = searcher.doc(docId);
}
d.get("latitude"); 

无论如何,当心! 如果发生异常,则您的“ d”变量将为null,并且您将获得未设置异常的对象引用! 要么包含d.get("latitude"); 在try块中,或在调用该行之前检查是否为null。

您应该初始化变量并捕获异常(可以根据需要更改异常名称并获取消息级别)。

Document d = null;
try {
   d = searcher.doc(docId);
   d.get("latitude");
} catch (Exception ex){
   ex.getMessage();
}

应该:

Document d = null;
try {
    d = searcher.doc(docId);
} catch (Exception e) {
    //...
}
d.get("latitude");

您可以将其初始化为null,但我认为不应该这样做。

如果该方法引发异常,则d == null,因此您需要使用if (d != null)处理该情况,或者仅在try块内使用作用域d。

我愿意去做。

如果您的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时,才会在您的异常确实发生时遮盖指针(使实际原因难以理解)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM