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

use*_*129 0 java reflection

我有以下课程:

public class GeneralClass
{
    public int x;
    public int[] arr = new int[3];
}
Run Code Online (Sandbox Code Playgroud)

以下逻辑:

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

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

use*_*315 8

你可以使用Array.getLength,但是你需要提供一个具体的实例,这就是我使用的原因cls.newInstance()(它假设有一个无参数的构造函数)

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);
                }
        }
    }
Run Code Online (Sandbox Code Playgroud)

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