ObjectPool.java
package swingtree.style;
import org.jspecify.annotations.Nullable;
import java.lang.ref.WeakReference;
import java.util.Map;
import java.util.WeakHashMap;
final class ObjectPool {
private static @Nullable ObjectPool INSTANCE = null;
static ObjectPool get() {
if ( INSTANCE == null )
INSTANCE = new ObjectPool();
return INSTANCE;
}
private final Map<Pooled<?>, WeakReference<Pooled<?>>> pool = new WeakHashMap<>();
private ObjectPool(){}
public <T> Pooled<T> intern(Pooled<T> value ) {
WeakReference<Pooled<T>> ref = (WeakReference) pool.get(value);
if (ref != null) {
Pooled<T> canonical = ref.get();
if (canonical != null) {
return canonical;
}
}
pool.put(value, new WeakReference<>(value));
return value;
}
}