尝试使用资源和方法链接

时间:2015-12-23 00:56:19

标签: java try-with-resources

我想在方法链中使用try-with-resources:

HttpEntity entity = response.getEntity();
try (Scanner s = new Scanner(entity.getContent()).useDelimiter("\\A")) {
  String page = s.next();
  return page;
}

我在new Scanner(...)

上收到“资源泄漏:永不关闭”

我可以解决它(见下文)但看起来有点矫枉过正。有什么建议吗?

HttpEntity entity = response.getEntity();
try (
     Scanner one = new Scanner(entity.getContent());
     Scanner s = one.useDelimiter("\\A")
    ) {
  String page = s.next();
  return page;
}

2 个答案:

答案 0 :(得分:3)

这个怎么样?

HttpEntity entity = response.getEntity();
try (Scanner s = new Scanner(entity.getContent())) {
  s.useDelimiter("\\A");
  return s.next();
}

在方法链接版本(以及修订后的代码中)中,(EDIT)IDE认为(/ EDIT)JVM创建了两个Scanner对象。但是你可以忽略useDelimiter()的返回值(因为它只是同一个Scanner)。

如果你真的在方法链上出售,你可以试试这个

HttpEntity entity = response.getEntity();
try (Scanner s = new Scanner(entity.getContent())) {
  return s.useDelimiter("\\A").next();
}

答案 1 :(得分:0)

在IntelliJ中,忽略useDelimiter()的输出没有帮助,但我发现它在Eclipse中有所帮助。在IntelliJ中,您可以在Settings>下配置从Scanner :: useDelimiter返回的实例。检查:)