import java.lang.ref.PhantomReference;
import java.lang.ref.ReferenceQueue;

public class AddressPhantomReference extends PhantomReference<Address> {

    private final Runnable thunk;

    AddressPhantomReference(Address referent, ReferenceQueue<? super Address> q) {
        super(referent, q);
        thunk = referent.getHouse()::close;
    }

    public void finalizeResources() {
        // free resources
        thunk.run();
        System.out.println("clearing ...");
    }
}
