В 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
(который принимает только объект карты), какова цель этого второго перегруженного конструктора?