我试图通过使用Reflection来避免对配置类的序列化进行硬编码,而我遇到了无法解决问题的情况。这就是我想要做的。
我有一个类似的课程
public class Configuration { public boolean bool = false; public int integer = 1; public int[] intArray = {0, 1}; }
我想使用反射将名称和值保存到一个 属性字段。
--properties-- bool=false integer=1 intArray=0,1
名称部分非常简单。我的问题是获取每个字段的值,特别是获取每个int []的值。除了数组之外,所有值都是原始的,因此toString()可以正常工作。
任何人都可以展示比Oracle更好的例子并帮助我吗?
答案 0 :(得分:3)
你必须使用数组吗?如果没有,您可以将对象表示为列表,并打印整数的列表表示。
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
}
答案 1 :(得分:0)
您可以使用java.utils.Arrays.toString(int [] a)方法。 要获得正确的数组类型,您可以在Kal的答案中使用f.getType()。isArray()和f.getType()。getComponentType()。