В чем разница между этими двумя способами создания TreeMap (или любой другой карты)? - PullRequest
0 голосов
/ 05 мая 2020

Я читаю код в проекте и наткнулся на эту строку кода:

private Map<String, Map<String, List<String>>> wordbatch;

Далее в коде я нашел еще одну строку кода в конструкторе:

wordbatch = new TreeMap<String, Map<String, List<String>>>;

Будет ли эта единственная строка кода иметь такой же эффект ?:

Map<String, Map<String, List<String>>> wordbatch = new TreeMap<String, Map<String, List<String>>>();

В чем разница между этой строкой кода и двумя строками кода выше?

Любая помощь ценится, и большое вам спасибо. Пытаюсь расширить свои знания о картах.

1 Ответ

2 голосов
/ 05 мая 2020

Между представленными вами утверждениями есть несколько тонких различий.

В первом случае вы объявляете переменную экземпляра (значение которой null) в строке X, и где-то в коде в строке Y вы даете ему другое значение, новую карту.

Во втором случае вы объявляете и присваиваете ему значение. Однако важно, где это происходит.

  • Если вы поместите это полное объявление там, где было исходное объявление, в строку X, то оно все равно будет переменной экземпляра. Однако
    1. Вы забыли свой private. Это может быть важно, если вы не хотите, чтобы другие классы в том же пакете использовали эту переменную напрямую. (ищите код, который проверяет, является ли эта переменная нулевой), тогда вы можете ввести ошибку, инициализировав ее в объявлении.
  • Если вы поместите это объявление там, где исходный присвоение было в строке Y, то вы больше не объявляете переменную экземпляра. Это становится локальной переменной. Остальная часть кода, которая ожидает существования этой переменной экземпляра, вызовет ошибки компиляции. Переменная экземпляра должна быть объявлена ​​ вне любого метода или конструктора.

Обратите внимание, что если строка Y находится в вашем конструкторе, и это единственный конструктор, то разница будет очень незначительной. двумя способами инициализации.

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