Если вы знаете, что что-то является массивом, но может быть примитивным массивом (например, int[]
), используйте класс java.lang.reflect.Array
для доступа к нему.
Например:
Object firstElement = Array.get(foo, 0);
извлечет первый элемент массива.
Существуют другие вспомогательные методы для получения элементов массива в виде примитивных типов, например, Array.getInt
.
Вы не можете кратко получить Object[]
от вашего Object
, но вы можете тривиально превратить его в List<Object>
, реализовав AbstractList
:
List<Object> myReflectiveList = new AbstractList<Object>() {
@Override public int size() { return Array.getLength(foo); }
@Override public Object get(int index) {
return Array.get(foo, index);
}
};
Теперь вы можете относиться к этому как к любому (неизменяемому) List
.
Вы можете многословно получить Object[]
, явно протестировав каждое из возможныхпримитивные типы и отступление к Object[]
:
Object[] objs = new Object[Array.getLength(foo)];
if (foo.getClass().equals(int[].class)) {
for (int i = 0; i < objs.length; ++i) {
objs[i] = Array.getInt(foo, i);
}
} else if (foo.getClass().equals(long[].class)) {
// For loop, with Array.getLong
} /* etc for other primitive types */ else {
// If it's an array but not a primitive array, you can just copy.
System.arraycopy(foo, 0, objs, 0, objs.length);
}