首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自Eclipse的Java try-with resource警告

来自Eclipse的Java try-with resource警告
EN

Stack Overflow用户
提问于 2014-01-22 19:38:21
回答 5查看 1.7K关注 0票数 0

对于Eclipse,为什么要使用try-with arm来管理它呢?

代码语言:javascript
复制
BufferedReader reader = null;
try {
  if (condition) {
    try {
      reader = method1();
    } catch (Exception e) {
      ...
    }
  }
  if (reader == null) {
    reader = method2();
  }

  do things ...
} catch(Exception e) {
  ...
} finally {
  if (reader != null) {
    reader.close();
  }
}

有没有更好的方法来处理这种情况?或者只是来自eclipse的垃圾警告?

此案例无效:

代码语言:javascript
复制
try (BufferedReader reader = null) {
  if (condition) {
    reader = method1();
  } else {
    reader = method2();
  }

  do things ...
}
EN

回答 5

Stack Overflow用户

发布于 2014-01-22 19:44:45

尝试:

代码语言:javascript
复制
try (BufferedReader reader = createBufferedReader(condition)) {
  do things ...
}

private BufferedReader createBufferedReader(boolean condition){
  if (condition) {
    return method1();
  } else {
    return method2();
  }
}
票数 1
EN

Stack Overflow用户

发布于 2014-01-22 20:03:04

正如jls-14.20.3中的Java声明的那样

在ResourceSpecification中声明的资源如果没有显式声明,则被隐式声明为最终 (§4.12.4)。

因此,您不能在try块中更改它。如果您希望能够对其进行更改,请使用标准try-catch-finally块。另一种选择是在将其与try- with -resources一起使用之前确定正确的资源。

票数 1
EN

Stack Overflow用户

发布于 2015-11-21 23:32:47

您不一定需要像Seby的答案中那样的可调用或lambda表达式。

考虑到这个问题非常简单,您可以简单地使用一个三元运算符,它适用于所有版本的java。

代码语言:javascript
复制
final String s = "abc";

try (BufferedReader reader = (condition) ? method1() : method2();) {

  do things ...

} catch (Exception e) {
  ...
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21281867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档