Peter,

On 09/12/15 07:05, Peter Levart wrote:
Hi,

I think the only way to try to prevent such things is with a good
example in javadoc that "screams" of possible miss-usages.


public static class CleanerExample implements AutoCloseable {

         private static final Cleaner cleaner = ...; // preferably a
shared cleaner

         private final PrivateNativeResource pnr;

         private final Cleaner.Cleanable cleanable;

         public CleanerExample(args, ...) {

             // prepare captured state as local vars...
             PrivateNativeResource _pnr = ...;

             this.cleanable = cleaner.register(this, () -> {
                 // DON'T capture any instance fields with lambda since
that would
                 // capture 'this' and prevent it from becoming

I assume that the WARNING should include anonymous inner classes too
( which I expect are quite common, though less now with lambda ) ?

Is "leaking" 'this' in a constructor a potential issue with respect
to the visibility of pnr? As well as causing red-squiggly lines in
the IDE ;-)

-Chris.


phantom-reachable!!!
                 _pnr.close();
             });

             this.pnr = _pnr;
         }

         public void close() {
             cleanable.clean();
         }


Regards, Peter

Reply via email to