Вопрос

Просматривая некоторый код java, это кажется неправильным.Мне кажется, что каждый раз, когда вы вызываете проекты, вы получаете новую хэш-карту, так что это утверждение всегда ложно

родовое слово

Похоже, у него должно быть резервное поле

родовое слово
Это было полезно?

Решение

Нет.В Java эта статическая переменная инициализируется только один раз.

Итак, эта линия вызывается только один раз.

родовое слово

Другие советы

Переменная projects будет инициализирована один раз при первой загрузке класса.

Как правило, статические карты такого типа - плохая идея: они часто приводят к утечкам памяти, поскольку ваши записи давно истекли.

В данном случае я бы также побеспокоился о безопасности потоков.Если у вас есть несколько потоков, вызывающих этот метод (который, вероятно, находится в коде, относящемся к веб-службам), вам необходимо синхронизировать доступ к карте, иначе вы можете ее повредить.

И, в общем стилистическом примечании, рекомендуется определять переменные, используя наименее ограничительный класс: в данном случае интерфейс Map , а не конкретный класс HashMap .

Вы не вызываете projects - это поле, а не метод.

Поскольку это статическое поле, оно будет инициализировано ровно один раз (по модулю загрузки одного и того же типа в несколько загрузчиков классов).

если вы добавите статический инициализатор (статический конструктор?), вы сможете увидеть, что статика инициализируется только при первой загрузке класса:

родовое слово

Вы не будете получать новую HashMap каждый раз, когда вызываете метод в проектах, если это то, о чем вы говорите.Новый HashMap будет создан один раз, однако все экземпляры класса будут использовать один HashMap.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top