Java - 如何通过反射检查数组长度(类中的字段)

时间:2014-11-20 19:25:04

标签: java reflection

我有以下课程:

public class GeneralClass
{
    public int x;
    public int[] arr = new int[3];
}

以下逻辑:

public void loadClass(Class cls) {          
    Field[] fields = cls.getDeclaredFields();
    for (Field field : fields) {            
            if (field.getType().isArray()) {
                // How can I print the array length ?
            }
    }
}

我怎么知道数组的大小(长度)是多少?

5 个答案:

答案 0 :(得分:8)

您可以使用Array.getLength,但是您需要提供一个具体的实例,以便我使用cls.newInstance()(它假设有一个无参数构造函数)<\ n < / p>

public static void loadClass(Class<?> cls) throws IllegalArgumentException, IllegalAccessException, InstantiationException {          
        Field[] fields = cls.getDeclaredFields();
        for (Field field : fields) {      
                if (field.getType().isArray()) {
                    int length = Array.getLength(field.get(cls.newInstance()));
                    System.out.println(length);
                }
        }
    }

请注意,如果该字段是静态的,您可以在类级别获取它,因此int length = Array.getLength(field.get(null));可以正常工作。

答案 1 :(得分:2)

数组字段arr属于该类的实例,因此其长度不能由通过反射获得的Field对象确定,因为这实际上是类级元数据。

答案 2 :(得分:0)

简单

System.out.println(field.length);

答案 3 :(得分:0)

查找数组长度的方法是fields.length

答案 4 :(得分:-1)

数组长度相当容易。它是

arrayName.length 

所以你可以说:

System.out.print(   "length  is " +  arr.length  );

Where is array's length property defined?