有没有办法动态地从不同的类中获取所有静态字段及其值?

时间:2019-07-16 14:29:40

标签: java spring spring-boot java-8 static

我需要在应用程序初始化时从不同的类中获取静态值,我使用的是@PostConstruct,我不知道如何在不创建每个类的实例的情况下检索所有这些值

2 个答案:

答案 0 :(得分:0)

在类上尝试静态初始化器

public class OtherClass {

   public static final String VALUE = "SomeValue";

}

public class SomeClass {

   static {
      OtherClass.VALUE;
   }
}

做任何你想做的事。

答案 1 :(得分:0)

您可以进行用户反思(甚至可以动态传递类名):

package com.example;

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;

public class Main {

    public static void main(String[] args)
            throws IllegalArgumentException, IllegalAccessException, ClassNotFoundException {
        printStaticFieldsAndValues("com.example.ClassWithStaticFields");
    }

    private static void printStaticFieldsAndValues(String className)
            throws IllegalArgumentException, IllegalAccessException, ClassNotFoundException {
        Class clazz = Class.forName(className);
        for (Field f : clazz.getDeclaredFields()) {
            if (Modifier.isStatic(f.getModifiers())) {
                System.out.println("Name: " + f.getName());
                System.out.println("Value " + f.get(null));
            }
        }
    }
}

具有静态字段的类:

package com.example;

public class ClassWithStaticFields {

    static String stringField = "String Value";

}

输出:

Name: stringField
Value String Value