All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.rx.core.Disposable Maven / Gradle / Ivy

package org.rx.core;

import org.rx.annotation.ErrorCode;

import static org.rx.core.Contract.values;

public abstract class Disposable implements AutoCloseable {
    private boolean closed;

    public boolean isClosed() {
        return closed;
    }

    @Override
    protected void finalize() throws Throwable {
        super.finalize();
        dispose();
    }

    private synchronized void dispose() {
        if (closed) {
            return;
        }
        freeObjects();
        closed = true;
    }

    protected abstract void freeObjects();

    @ErrorCode(messageKeys = {"$type"})
    protected void checkNotClosed() {
        if (closed) {
            throw new SystemException(values(this.getClass().getSimpleName()));
        }
    }

    @Override
    public void close() {
        dispose();
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy