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