使用反射来检索未知类型的基元数组

dig*_*nie 9 java reflection

我正在使用反射来检索实例字段,例如:

private int[] numbers = ....
Run Code Online (Sandbox Code Playgroud)

使用field对象,我可以检查字段是否包含数组,如果有,我想循环遍历数组中的int.因此,如果包含上述字段的对象被称为"foo",那么我会有这样的事情:

field.setAccessible(true);
Object value = field.get(foo);
Run Code Online (Sandbox Code Playgroud)

上面的值变量将包含我的int数组.如何将该对象视为常规数组并迭代其值?

编辑:抱歉,我错过了上述故事的关键点.我正在以通用方式执行上述操作,因此我不知道数组包含什么原语.它可能是一个int []或long []等.所以强制转换为int []在long []情况下是行不通的.哎呀!

Jör*_*ann 14

您可以使用该类java.lang.reflect.Array访问数组的长度和单个元素.该get方法应该以通用方式工作,可能在其包装器对象中包装基元.

  • @digiarnie,该方法有点隐藏在其他getter之间的javadoc中,它是`Array.getLength(Object array)`:) (3认同)