[英]What's best practice to close resoures?
我有一個Java類,該類分配了必須關閉的資源。 我真的不知道如何執行此操作,我當前的方法是實現接口AutoCloseable
,希望調用方有時調用close()
並添加一個boolean
close()
,該boolean
在每個方法的開頭都進行檢查,如果為true
,則該方法拋出IllegalStateException
。
調用者必須調用close()
和我必須在每個方法的開始處都檢查是否關閉都不好,是否有一些最佳實踐來避免這種情況?
在您的情況下,使您的類實現接口AutoCloseable
是一個好方法,因為它允許在try-with-resource
語句中使用它。
如果出於某種原因您想限制對象實例沒有正確關閉以避免泄漏的風險,則可以覆蓋finalize
方法,如下所示:
@Override
protected void finalize() throws Throwable {
try {
this.close();
} finally {
super.finalize();
}
}
警告1:必須非常謹慎地實現finalize
方法,因為它會減慢GC的工作,因此您需要確保代碼能夠快速執行。
警告2:不必調用finalize
方法,因此不要依賴它來為您close
對象,它只能幫助降低風險,對象的用戶仍然有責任正確close
它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.