Hi Rogger,

On 12/04/2017 02:17 PM, Peter Levart wrote:
Hi Rogger,

Interesting approach. Conditional finalization. You use finalization to support cases where user overrides finalize() and/or close() and Cleaner when he doesn't.

I wonder if it is the right thing to use AltFinalizer when user overrides finalize() method. In that case the method is probably not empty and calls super.finalize() (if it is empty or doesn't call super, user probably doesn't want the finalization to close the stream) and so normal finalization applies. If you register AltFinalizer for such case, close() will be called twice.

Ah, scrap that. I forgot that XXXStream.finalize() is now empty, so user overriding it and calling super does not in fact close the stream. You have to register AltFinalizer in that case. But now I wonder if the logic should still be 3-state and do the following:

- if user overrides finalize() - use AltFinalizer to call both: first finalize() and then close(); else
- if user overrides close() - use AltFinalizer to call close(); else
- use Cleaner

What do you think?

Regards, Peter

Reply via email to