Я пытаюсь написать метод, который получает Object и выполняет некоторую логику с полями объектов.
Мой метод выглядит так:
public void exampleCast(Object obj) {
Field[] fields = obj.getClass().getFields();
for (Field field : fields) {
if (field.getClass().isArray()) {
/*
HOW CAN I GO OVER THE ARRAY FIELDS , WITHOUT CREATING NEW INSATCNE ?
SOMETHING LIKE:
for (int i = 0; i < array.length; i++) {
array[i] ...
}
*/
} else {
...
...
}
}
}
И пример для объектов:
class TBD1 {
public int x;
public int y;
public int[] arrInt = new int[10];
public byte[] arrByte = new byte[10];
}
И позвоните по моему методу:
TBD1 tbd1 = new TBD1();
exampleCast(tbd1);
В моем mehod я не знаю, как я могу получить значения массива без создания нового экземпляра (используя метод "newInstance"). Возможно ли это? (см. комментарий, который я написал в моем примере)
Я прочитал эти 2 веб-сайта: http://jroller.com/eyallupu/entry/two_side_notes_about_arrays
http://tutorials.jenkov.com/java-reflection/arrays.html
Но не получил то, что я хочу.
Пожалуйста, помогите :) Спасибо
Если я понимаю ваш вопрос, вы можете использовать java.lang.reflect.Array
и что-то вроде
if (field.getType().isArray()) { // <-- should be getType(), thx @Pshemo
Object array = field.get(obj);
int len = Array.getLength(array);
for (int i = 0; i < len; i++) {
Object v = Array.get(array, i);
System.out.println(v);
}
} // ...
getType
это не должно бытьgetType
вместоgetClass
? Если я не ошибаюсь,getClass
вызванный для экземпляраField
, вернет намField.class
который определенно не является массивом. Мы хотим проверить, является ли тип переменной массивом.