Retrieve only static fields declared in Java class

后端 未结 4 1216

I have the following class:

public class Test {
    public static int a = 0;
    public int b = 1;
}

Is it possible to use reflection to ge

相关标签:
4条回答
  • 2020-11-29 23:54

    If you can add open-source dependencies to your project you can also use FieldUtils.readDeclaredStaticField(Test.class,"a")

    0 讨论(0)
  • 2020-11-29 23:55

    You can do it like this:

    Field[] declaredFields = Test.class.getDeclaredFields();
    List<Field> staticFields = new ArrayList<Field>();
    for (Field field : declaredFields) {
        if (java.lang.reflect.Modifier.isStatic(field.getModifiers())) {
            staticFields.add(field);
        }
    }
    
    0 讨论(0)
  • 2020-11-30 00:01

    I stumbled across this question by accident and felt it needed a Java 8 update using streams:

    public static List<Field> getStatics(Class<?> clazz) {
        List<Field> result;
    
        result = Arrays.stream(clazz.getDeclaredFields())
                // filter out the non-static fields
                .filter(f -> Modifier.isStatic(f.getModifiers()))
                // collect to list
                .collect(toList());
    
        return result;
    }
    

    Obviously, that sample is a bit embelished for readability. In actually, you would likely write it like this:

    public static List<Field> getStatics(Class<?> clazz) {
        return Arrays.stream(clazz.getDeclaredFields()).filter(f ->
            Modifier.isStatic(f.getModifiers())).collect(toList());
    }
    
    0 讨论(0)
  • 2020-11-30 00:21

    Thats Simple , you can use Modifier to check if a field is static or not. Here is a sample code for that kind of task.

    public static void printModifiers(Object o) {
        Class c = o.getClass();
        int m = c.getModifiers();
        if (Modifier.isPublic(m))
            System.out.println ("public");
        if (Modifier.isAbstract(m))
            System.out.println ("abstract");
        if (Modifier.isFinal(m))
            System.out.println ("final");
        if(Modifier.isStatic(m))
            System.out.println("static");
    }
    
    0 讨论(0)
提交回复
热议问题