Java 使用反射动态保存类中的所有字段?(“字段名称”和“字段值”)

Java 使用反射动态保存类中的所有字段?(“字段名称”和“字段值”),java,serialization,reflection,properties,Java,Serialization,Reflection,Properties,我试图通过使用反射来避免对配置类的序列化进行硬编码,但我遇到了一种无法解决任何问题的情况。这就是我要做的 我有一节这样的课 我想使用反射将名称和值保存到 属性字段 名称部分非常简单。我的问题是获取每个字段的值,尤其是获取每个int[]的值。除了数组之外,所有值都是基本值,因此toString()可以正常工作 有谁能提供比Oracle更好的示例并帮助我解决问题吗?您必须使用阵列吗?如果不是,您可以将对象表示为列表,这将打印整数的列表表示 public boolean bool = false; p

我试图通过使用反射来避免对配置类的序列化进行硬编码,但我遇到了一种无法解决任何问题的情况。这就是我要做的

我有一节这样的课

我想使用反射将名称和值保存到 属性字段

名称部分非常简单。我的问题是获取每个字段的值,尤其是获取每个int[]的值。除了数组之外,所有值都是基本值,因此toString()可以正常工作


有谁能提供比Oracle更好的示例并帮助我解决问题吗?

您必须使用阵列吗?如果不是,您可以将对象表示为列表,这将打印整数的列表表示

public boolean bool = false;
public int integer = 1;
public int[] intArray = {0, 1}; // <-- This prints array's memory address
public List<Integer> intList = Arrays.asList(1, 2 , 3); // <-- This prints [1,2,3]

public static void main(String[] args) throws Exception {
     Config c = new Config();
     for ( Field f : c.getClass().getDeclaredFields() ) {
           System.out.println(f.get(c));
     }

 }

您可以使用java.utils.Arrays.toString(int[]a)方法。
要获得正确的数组类型,可以在Kal的答案中使用f.getType().isArray()和f.getType().getComponentType()。

newint[]{1,2,3}。toString()
无法按预期工作。它将委托给
对象.toString()
;为什么不使用XML或JSON?它们都有现成的序列化程序,而且可读性很强。@llia G我实际上并没有使用properties对象将结果保存到文件中。我正在研究一种非常复杂的方法来保存gui的设置,并从配置文件启动它们。我将使用一个属性文件在启动gui时设置JComponent的值。我使用了Component.setName(字符串)方法设置为配置文件中对应值的名称。由于在运行时无法知道确切的字段类型,因此必须对每个基元进行说明,并使用反射类对字段类调用相应的get方法。@ggreiner是否可以将数组解析为对象[]?
--properties--
bool=false
integer=1
intArray=0,1
public boolean bool = false;
public int integer = 1;
public int[] intArray = {0, 1}; // <-- This prints array's memory address
public List<Integer> intList = Arrays.asList(1, 2 , 3); // <-- This prints [1,2,3]

public static void main(String[] args) throws Exception {
     Config c = new Config();
     for ( Field f : c.getClass().getDeclaredFields() ) {
           System.out.println(f.get(c));
     }

 }
if ( "int[]".equals(f.getType().getSimpleName() ) ) {
   // do stuff
}