Отражение массива в Java - PullRequest
       1

Отражение массива в Java

0 голосов
/ 26 ноября 2011

Я новичок в Java и имею задачу написать какое-то приложение. Столкнулся с одной проблемой, которая не может пройти: (

Проблема заключается в обновлении элемента массива путем отражения (приложение выбирает публичный массив для динамического обновления в зависимости от чтения строки приложения из файла):

Сначала я отразил логические переменные следующим образом:

activity = activityName(activities[i].substring(0,activities[i].lastIndexOf('.', activities[i].length() - 4)));  
Field field = refClass.getField(activity);  
Object obj = field;  
field.setBoolean(obj, true);

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

activity = activityName(activities[i].substring(0, activities[i].lastIndexOf('.',  activities[i].length() - 4)));  
Field field = refClass.getField(activity);  
Object field_act = field;  
field_act.setBoolean(field_act, LMKStorage.currentLmkSlot, true);

И получаю исключение "Аргумент не массив". (

В field_act.setBoolean(field_act, LMKStorage.currentLmkSlot, true);, field_act - логическое значение [], которое я получаю с помощью .getField(activity), LMKStorage.currentLmkSlot - это int, чтобы определить, какую позицию массива установить, а "true" - значение, которое нужно установить. Field_act, который я должен получить на 100% - это массив, потому что в refClass у меня нет статических переменных, не являющихся массивами.

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

Пожалуйста, совет.

1 Ответ

1 голос
/ 26 ноября 2011

Для массивов используйте java.lang.reflect.Array вместо java.lang.reflect.Field.

Object field_act = field.get(obj);
Array.setBoolean(field_act, LMKStorage.currentLmkSlot, true);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...