2016-07-27 3 views
0

При открытии ресурса в основном методеразница в ресурсе закрытие

WebClient webClient = new WebClient(); 

затмение показывает мне предупреждение 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()) { 
    ... 
} 
Смежные вопросы