python, сгенерировал список, объединив динамическую переменную списка

Позвольте мне немного рассказать об одном случае, когда вы использовали для использования final, о котором уже упоминал Джон:

Если вы создаете анонимный внутренний класс в своем методе и используете локальная переменная (такая как параметр метода) внутри этого класса, тогда компилятор заставляет вас сделать параметр final:

public Iterator<Integer> createIntegerIterator(final int from, final int to)
{
    return new Iterator<Integer>(){
        int index = from;
        public Integer next()
        {
            return index++;
        }
        public boolean hasNext()
        {
            return index <= to;
        }
        // remove method omitted
    };
}

Здесь параметры from и to должны быть окончательными, поэтому они могут использоваться внутри анонимного класса.

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

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

0
задан weblogicGuy 22 February 2019 в 15:58
поделиться

1 ответ

То есть, вы хотите иметь доступ к соответствующему списку, основываясь на передаваемом значении env? Если они представляют собой статические списки, как вы показываете, проще всего было бы поместить их в словарь:

ENV_DICT = {
    "UPE_ENV": ['AMPOMSU01','AMPOAGU01','ampwt12u01','AMPDSU01'],
    "DEV_ENV": ['AMPOMSD01','AMPOAGD01','ampwt12d01','AMPDST01']
}

Затем вы могли бы извлечь его из этого слова:

env_list = ENV_DICT[env + '_ENV']
startOVD('start',env_list[3])

всегда вызывайте startOVD одним и тем же способом, независимо от значения env, вам не нужен оператор if.

0
ответ дан RiceKab 22 February 2019 в 15:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: