
org.rx.core.Disposable Maven / Gradle / Ivy
package org.rx.core;
import org.rx.annotation.ErrorCode;
import org.rx.exception.ApplicationException;
import static org.rx.core.Extends.values;
public abstract class Disposable implements AutoCloseable {
private volatile 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
protected void checkNotClosed() {
if (closed) {
throw new ApplicationException(values(this.getClass().getSimpleName()));
}
}
@Override
public void close() {
dispose();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy