按照它们在源文件中出现的顺序获取java bean属性名称的列表/数组

时间:2012-05-21 22:04:56

标签: java reflection javabeans

我有一个像

这样的课程
class A {

    private String property1;

    private String property2;

    private String property3;

    // constructor , getters , setters 

}

可以按照它们在源文件中出现的顺序获取此类属性名称的列表/数组吗?比如["property1", "property2", "property3"]

3 个答案:

答案 0 :(得分:2)

答案是你做不到。您需要的信息在运行时不能从.class文件中获得。

  

在我的代码的其他部分,我需要按特定顺序“打印”此类的数据。真实案例中的这个类有很多属性并且可以更改(作为顺序)所以,我可以自己编写这个数组/列表来获取我需要的顺序但是如果有可能从类中获取它将是对我来说更好。

以下是解决此问题的更好方法:

  • 在打印前按名称或类型名称或有意义的内容对属性进行排序。
  • 在定义bean属性顺序的bean类(或另一个类)中嵌入一个数组。
  • 创建一个单独的元数据文件,指定bean属性顺序。

您可以对源代码进行一些构建时预处理,以提取属性的顺序,并(比如)将它们写入文件。但坦率地说,我认为分离这些方面会更好;例如这样您的系统集成商/最终用户就可以在不更改源代码的情况下调整属性顺序。

答案 1 :(得分:1)

  

可以获得此类属性名称的列表/数组

是的,使用Class.getDeclaredFields()

  

按照它们出现在源文件中的顺序

不,除非你解析源文件,否则没有任何保证。

答案 2 :(得分:1)

这不太准确。 Class#getDeclaredFields不保证返回字段的顺序。但是,在我刚刚进行的测试中,这些字段确实以其声明顺序返回。