2016-07-27 89 views
0

当我在main方法打开资源差异资源关闭

WebClient webClient = new WebClient(); 

的Eclipse显示我警告Resource leak: 'webClient' is never closed。所以,我需要通过

webClient.close(). 

关闭资源,但是当我得到WebClient从方法

WebClient webClient = getWebCLient() 

public static WebClient getWebClient() { 
    WebClient webClient = new WebClient(); 
    ... 
    return webClient; 
} 

我没有收到这样的警告。为什么?

+3

因为编译器是不是足够聪明,找出客户端永远不会关闭。 – immibis

+0

这意味着问题依然存在,只有IDE没有告诉我这个问题。是否使用'try(WebClient webClient = getWebClient()){...'它是一个正确的解决方案? –

回答

1

在这种情况下,IDE并不足以提醒您。绝不意味着WebClient已不再被关闭。

如果WebClient工具AutoCloseable认为,作为一个很好的做法,将呼叫换到getWebClient()成一试,与资源的自动关闭

try (WebClient wc = getWebClient()) { 
    ... 
}