Java быстрый вопрос о «динамических» переменных - PullRequest
1 голос
/ 20 мая 2011

Допустим, у меня есть приложение, которое считывает информацию из файла конфигурации.И скажем, каждый раз, когда я сталкиваюсь со словом «Hello» в этом конфигурационном файле, я хочу иметь возможность создавать переменную типа String и называть ее Hello0, Hello1, Hello2 и т. Д. И т. Д.

Iзнать, что такие динамические переменные невозможны (по большей части) в программировании.Но будет ли какой-то обходной путь?Как позволить пользователю решить, сколько переменных иметь?

Ответы [ 2 ]

7 голосов
/ 20 мая 2011

Хеш-карты очень хороши для хранения такого рода информации.

hashMap.put("Hello0", string);

хранит вашу информацию

hashMap.get("Hello0");

вытаскивает его.

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

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

Если синтаксис действительно вас раздражает, начните свой класс так:

public class MyClass {
    private HashMap<String, Object> vars=new HashMap();

    private var(String s, Object o) {
        vars.put(s, o);
    }

    private Object var(String s) {
        return vars.get(s);
    }
}

Тогда из любого места в классе вы можете использовать:

var("var1", 5); // create or update variable 1 to the value 5
System.out.println("value ="+var("var2"));  // get variable

для немного лучшего синтаксиса. (Но будьте осторожны с первым примером - если у вас есть проблемы, посмотрите «Autoboxing», потому что именно это делает Java, когда вы передаете int как объект)

4 голосов
/ 20 мая 2011

Звучит так, будто вам просто нужно вместо List<String> - или если вам нужен доступ к ним по имени, возможно, Map<String, List<String>>.(Таким образом, «Hello» отображается в список строковых значений.)

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