Как сделать текст в TextView именем переменной? [Дубликат]

Экземпляр UniqueConstraint является итерируемым и в этом случае немедленно останавливает итерацию, поэтому

tuple(db.UniqueConstraint('name', 'address'))

приводит к пустым кортежам, когда вам нужен кортеж, содержащий 1 элемент, ограничение пример. Используйте

__table_args__ = (db.UniqueConstraint('name', 'address'), )

или любые другие варианты. Что касается того, почему последняя форма не работает, вы должны применять объекты ограничения уровня таблицы, используя __table_args__ в декларативном.

71
задан user2864740 5 May 2014 в 21:41
поделиться

7 ответов

Это не то, как вы делаете что-то на Java. В Java нет динамических переменных. Переменные Java должны быть объявлены в исходном коде (*). Период.

В зависимости от того, чего вы пытаетесь достичь, вы должны использовать массив, List или Map; например,

int n[] = new int[3];
for (int i = 0; i < 3; i++) {
    n[i] = 5;
}

List<Integer> n = new ArrayList<Integer>();
for (int i = 1; i < 4; i++) {
    n.add(5);
}

Map<String, Integer> n = new HashMap<String, Integer>();
for (int i = 1; i < 4; i++) {
    n.put("n" + i, 5);
}

Можно использовать динамическое отражение для обозначения переменных , которые были объявлены в исходном коде. Однако это работает только для переменных, являющихся членами класса (т. Е. Статических полей и полей экземпляра). Он не работает для локальных переменных. См. Пример «быстрый и грязный» @ fyr.

Однако делать это без необходимости в Java - это плохая идея. Это неэффективно, код более сложный, и поскольку вы полагаетесь на проверку времени выполнения, он более хрупкий.

И это не «переменные с динамическими именами». Он лучше описывает динамический доступ к переменным со статическими именами.


* - Это утверждение немного неточно. Если вы используете BCEL или ASM, вы можете «объявить» переменные в файле байт-кода. Но не делай этого! Таким образом, безумие!

91
ответ дан Stephen C 22 August 2018 в 17:10
поделиться
  • 1
    Thanx много, получил то, что я искал. Последняя часть (Map & lt; String, integer & gt;). – Ashish Anand 18 July 2011 в 08:35
  • 2
    Следует отметить, что даже если бы это было возможно, это не должно было быть чем-то, что вы на самом деле делали бы. Вы ничего не получаете от этого; вы действительно потеряете удобочитаемость. Если вы хотите связать их, используйте вместо этого Map<String, T>, не начинайте возиться с вашим фактическим кодом. – Jeroen Vannevel 15 December 2013 в 04:37
  • 3
    @JeroenVannevel - Вот что я имел в виду под «безумием». :-) – Stephen C 15 December 2013 в 09:25
11
ответ дан AlexR 22 August 2018 в 17:10
поделиться
2
ответ дан everton 22 August 2018 в 17:10
поделиться

Если вы хотите получить доступ к переменным какой-то динамике, вы можете использовать отражение. Однако Reflection работает не для локальных переменных. Это применимо только для атрибутов класса.

Грубый быстрый и грязный пример:

public class T {
    public Integer n1;
    public Integer n2;
    public Integer n3;

    public void accessAttributes() throws IllegalArgumentException, SecurityException, IllegalAccessException,
            NoSuchFieldException {

        for (int i = 1; i < 4; i++) {
            T.class.getField("n" + i).set(this, 5);
        }
    }
}

Вам нужно улучшить этот код различными способами, это только пример. Это также не считается хорошим кодом.

28
ответ дан fyr 22 August 2018 в 17:10
поделиться
  • 1
    Отлично, когда вам нужно преобразовать датчик сенсора event.values ​​[] в набор переменных. event.values ​​[] может иметь длину от 1 до 6, и это удобно для его преобразования, в моем случае для jars-маршалинга без использования массива. – Farshid T 21 June 2015 в 22:30

Вы должны использовать List или array вместо

List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);

Или

int[] arr  = new int[10];
arr[0]=1;
arr[1]=2;

Или даже лучше

Map<String, Integer> map = new HashMap<String, Integer>();
map.put("n1", 1);
map.put("n2", 2);

//conditionally get 
map.get("n1");
10
ответ дан Jigar Joshi 22 August 2018 в 17:10
поделиться
5
ответ дан Op De Cirkel 22 August 2018 в 17:10
поделиться

Попробуйте следующим образом:

    HashMap<String, Integer> hashMap = new HashMap();

    for (int i=1; i<=3; i++) {
        hashMap.put("n" + i, 5);
    }
3
ответ дан user 22 August 2018 в 17:10
поделиться
Другие вопросы по тегам:

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