import static com.google.common.base.Preconditions.checkArgument;
-import com.google.common.annotations.Beta;
import java.util.Collection;
import java.util.Map;
import java.util.Set;
*
* @param <K> the type of keys maintained by this template
*/
-@Beta
-public abstract class ImmutableMapTemplate<K> implements Immutable {
+public abstract sealed class ImmutableMapTemplate<K> implements Immutable
+ permits ImmutableOffsetMapTemplate, SharedSingletonMapTemplate {
ImmutableMapTemplate() {
// Hidden on purpose
}
* @param <V> the type of mapped values
*/
@Beta
-public abstract class ImmutableOffsetMap<K, V> implements UnmodifiableMapPhase<K, V>, Serializable {
+public abstract sealed class ImmutableOffsetMap<K, V> implements UnmodifiableMapPhase<K, V>, Serializable {
static final class Ordered<K, V> extends ImmutableOffsetMap<K, V> {
@Serial
private static final long serialVersionUID = 1L;
* @param objects Array of value object, may not be null. The array is stored as is, the caller
* is responsible for ensuring its contents remain unmodified.
*/
- ImmutableOffsetMap(final ImmutableMap<K, Integer> offsets, final V[] objects) {
+ private ImmutableOffsetMap(final ImmutableMap<K, Integer> offsets, final V[] objects) {
this.offsets = requireNonNull(offsets);
this.objects = requireNonNull(objects);
checkArgument(offsets.size() == objects.length);
*
* @param <K> the type of keys maintained by this template
*/
-public abstract class ImmutableOffsetMapTemplate<K> extends ImmutableMapTemplate<K> {
+public abstract sealed class ImmutableOffsetMapTemplate<K> extends ImmutableMapTemplate<K> {
private static final class Ordered<K> extends ImmutableOffsetMapTemplate<K> {
Ordered(final Collection<K> keys) {
super(OffsetMapCache.orderedOffsets(keys));
private final @NonNull ImmutableMap<K, Integer> offsets;
- ImmutableOffsetMapTemplate(final ImmutableMap<K, Integer> offsets) {
+ private ImmutableOffsetMapTemplate(final ImmutableMap<K, Integer> offsets) {
this.offsets = requireNonNull(offsets);
}
* @param <V> the type of mapped values
*/
@Beta
-public abstract class SharedSingletonMap<K, V> implements Serializable, UnmodifiableMapPhase<K, V> {
+public abstract sealed class SharedSingletonMap<K, V> implements Serializable, UnmodifiableMapPhase<K, V> {
static final class Ordered<K, V> extends SharedSingletonMap<K, V> {
@Serial
private static final long serialVersionUID = 1L;
private final @NonNull V value;
private int hashCode;
- SharedSingletonMap(final SingletonSet<K> keySet, final V value) {
+ private SharedSingletonMap(final SingletonSet<K> keySet, final V value) {
this.keySet = requireNonNull(keySet);
this.value = requireNonNull(value);
}
- SharedSingletonMap(final K key, final V value) {
+ private SharedSingletonMap(final K key, final V value) {
this(cachedSet(key), value);
}
*
* @param <K> the type of keys maintained by this template
*/
-public abstract class SharedSingletonMapTemplate<K> extends ImmutableMapTemplate<K> {
+public abstract sealed class SharedSingletonMapTemplate<K> extends ImmutableMapTemplate<K> {
private static final class Ordered<K> extends SharedSingletonMapTemplate<K> {
Ordered(final K key) {
super(key);
private final @NonNull SingletonSet<K> keySet;
- SharedSingletonMapTemplate(final K key) {
+ private SharedSingletonMapTemplate(final K key) {
this.keySet = SharedSingletonMap.cachedSet(key);
}