我收到SonarQube錯誤:" 強制建議在此方法實作結束時調用super.finalize(),以防父實作必須也處置一些系統資源。"
但我發現Object類沒有finalize方法的實作。
那麼為什麼需要調用super.finalize()?
這不是一個需要,它是一個應該遵循的終結者寫作成語。
如果在将來的任何時候,您重構代碼并且您的類擴充了其他可能具有finalize方法的類,這種做法将防止出現奇怪的錯誤。
這個成語是:
try {
// Do whatever the finalization is
}
finally {
super.finalize();
}
這確定了即使抛出一些異常,也會調用超類終結器(如果有一個非平凡的終結器)(因為沒有捕獲終結器中的異常,它們的執行隻是停止)。
如何避免終結者 ,可以參考Joshua Bloch的Effective Java第二版第7項。