Почему хэш-карта не может быть статичной? - PullRequest
1 голос
/ 11 января 2011

почему этот синтаксис недопустим ..?Можете ли вы пролить свет на то, что является проблемой дизайна в том, что HashMap не должен быть статичным с такими объявлениями?

static HashMap<String,  String> map2 = new HashMap<String,  String> ();

Ответы [ 4 ]

11 голосов
/ 11 января 2011

Эта декларация совершенно легальна сама по себе. Я могу вспомнить две причины, по которым вы получите ошибку:

  • Вы помещаете это объявление где-то, где статические объявления недопустимы (например, внутри метода).
  • Вы не импортировали java.util.HashMap (конечно, в этом случае ошибка не имеет никакого отношения к использованию ключевого слова static).
7 голосов
/ 11 января 2011
static HashMap<String,  String> map2 = new HashMap<String,  String> (); 

совершенно правильно, если у вас есть этот код на уровне класса, а не в методе.

Где у вас это?

После обновления:

У вас есть переменная, объявленная на уровне метода, статические переменные недопустимы на уровне метода.

static переменные класс переменные. Один в классе. Поэтому не имеет смысла иметь переменные, которые видны только внутри метода, который будет die после того, как метод будет завершен, чтобы быть «уровнем класса». По крайней мере, вот как это видит Java.

0 голосов
/ 11 января 2011

Мы можем объявить любую коллекцию в java статической. Так что в вашей декларации нет ничего плохого.

static HashMap<String,  String> map2 = new HashMap<String,  String> ();
0 голосов
/ 11 января 2011

Ваше объявление HashMap полностью правильно, может быть, вы пытаетесь использовать его из нестатического контекста / метода?

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