Может ли Collections.unmodified быть применен к Collections.EMPTY_MAP - PullRequest
0 голосов
/ 09 марта 2012
private final Map q;
public Info()
{
    this(Collections.EMPTY_MAP);
}

public Info(final Map q)
{
    this.qualifiers = new HashMap(q);
}

   public Map getQ()
{
    return Collections.unmodifiableMap(q);
}

Нужно ли использовать Collections.unmodifiableMap (), потому что я видел из документов JAVA EMPTY_MAP, что он неизменный?

Ответы [ 2 ]

2 голосов
/ 09 марта 2012

EMPTY_MAP является неизменным, но вам все равно нужно использовать Collections.unmodifiableMap(q), если Info был создан с картой, которая не является EMPTY_MAP, с использованием второго конструктора ...

0 голосов
/ 09 марта 2012

Нет.Вам нужно использовать Collections.unmodifiableMap (), если вы хотите, чтобы клиенты вашего класса никогда не изменяли его внутреннее представление, или, скорее, если вы хотите, чтобы сбой происходил, если клиент когда-либо пытается это сделать.

В случае, когда внутренняя карта q равна Collections.EMPTY_MAP, вам не нужно заключать ее в вызов к Collections.unmodifiableMap, потому что она уже не поддается изменению.Однако у вас есть альтернативный конструктор, который создает q в качестве изменяемой карты, и в этом случае вам нужно будет защитить ее перед возвратом.

Вы также можете просто вернуть копию q, в которойклиенты case могут изменять возвращаемый объект, не изменяя внутреннего состояния вашего класса и не вызывая исключение.

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