Назначение перегруженного конструктора в классе SynchronizedMap - PullRequest
0 голосов
/ 13 июня 2018

В Collections классе, класс SynchronizedMap имеет два конструктора.Один принимает только экземпляр map, а другой - map и mutex.

    SynchronizedMap(Map<K,V> m) {
        this.m = Objects.requireNonNull(m);
        mutex = this;
    }

    SynchronizedMap(Map<K,V> m, Object mutex) {
        this.m = m;
        this.mutex = mutex;
    }

Однако класс SynchronizedMap является частным статическим классом и единственным способом доступа к нему с помощью предоставленного метода-оболочки:

public static <K,V> Map<K,V> synchronizedMap(Map<K,V> m) {
    return new SynchronizedMap<>(m);
}

Как понятно из эта ссылка ,идея второго конструктора использовать предоставленный пользователем mutex, отличный от this.Теперь, поскольку метод-обертка - единственный способ получить экземпляр SynchronizedMap (который принимает только объект карты), какова цель этого второго перегруженного конструктора?

1 Ответ

0 голосов
/ 13 июня 2018

Используется, например, в SynchronizedSortedMap, который расширяется SynchronizedMap при создании представления подкарты.

 public SortedMap<K,V> subMap(K fromKey, K toKey) {
            synchronized (mutex) {
                return new SynchronizedSortedMap<>(
                    sm.subMap(fromKey, toKey), mutex);
            }
        }

Для совместного использования того же мьютекса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...