Java: как хранить вещи в памяти каждого пользователя - PullRequest
0 голосов
/ 29 марта 2011

Мне нужно сохранить значения, специфичные для имени пользователя, в памяти, я думал о чем-то вроде динамического именования переменных, чтобы я мог сделать что-то вроде

["bubby4j_falling"] = true;

и индексировать его как

["bubby4j_falling"]

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

Ответы [ 2 ]

7 голосов
/ 29 марта 2011

Вы хотите использовать карту со строковыми ключами, например HashMap<String, something>.

Ваш пример будет выглядеть так:

Map<String, Boolean> map = new HashMap<String, Boolean>();
map.put("bubby4j_falling", true);

if(map.get("bubby4j_falling")) {
    ...
}

На самом деле, в вашем случае Set<String> было бы более полезным:

Set<String> fallingUsers = new HashSet<String>();
fallingUsers.add("bubby4j");

if(fallingUsers.contains("bubby4j")) { ... }

Но если у вас уже есть User объекты (и вы должны это сделать), вам лучше использовать Set<User> или даже позволить этому falling просто быть свойством пользовательского объекта. Тогда у вас может быть Map<String, User> для получения пользовательских объектов по имени.

1 голос
/ 29 марта 2011

@ Ответ Пауло Эберманна точен.

Я просто хочу отметить, что в языке Java нет ничего похожего на динамическую переменную . Все имена переменных Java и их типы объявлены в исходном коде Java. Даже отражение не позволит вам создавать новые переменные на лету в существующем классе.

Java спроектирован как статический язык программирования, и он лучше всего работает, если вы используете его таким образом.

(Теоретически, если вы возитесь с технологиями генерации исходного кода или байт-кода, вы можете динамически создать новый класс с новыми переменными. Однако это требует ОГРОМНОГО объема работы, а не того, что разумный программист предполагает делать чтобы решить простую проблему. Кроме того, я сомневаюсь, что этот подход действительно поможет в вашем конкретном случае.)

...