保留注释的顺序

时间:2012-10-22 10:06:44

标签: java android annotations

使用getFields()getDeclaredFields()获取字段列表时,Java class中字段的顺序未定义。

我需要在验证库中使用此订单。由于订单未被保留(尽管有些人声称订单在JDK 6及更高版本中保留,但不能保证跨VM)。我无法推测这一点,因为跨字段的注释顺序对于库来说是绝对必要的。

解决此问题的一种方法是在order中拥有indexAnnotation属性。

令我担心的是,在以下情况下维护代码可能会变得有点麻烦。

  1. 如果用户想要插入一个新的带注释的字段,那么他可能需要重新编号该类中的所有其他注释。
  2. 我可以将orderindex作为浮点数 - floatdouble但是,拥有1等订单效果不佳1.5,2等,
  3. 这个问题的优雅解决方案是什么?

    这是一个示例代码,以便您可以了解问题:

    @Required
    @TextRule (minLength = 6, message = "You need at least 6 characters.")
    private EditText usernameEditText;
    
    @Password
    private EditText passwordEditText;
    
    @ConfirmPassword
    private EditText confirmPasswordEditText;
    
    @Email
    private EditText emailEditText;
    

2 个答案:

答案 0 :(得分:0)

我会说排序不是类本身固有的,而是取决于使用它的类。所以我会考虑忘记修改原始类并添加一个properties文件(可能与该类的名称相同)来定义顺序。

如果您需要稍后添加项目,请不要逐步排序,但是(比如说)10 by 10.第一种方法有索引1,第二种方法有索引11,依此类推。你不可能重新索引它,如果你这样做,重新索引属性文件很容易通过手工/程序完成。

答案 1 :(得分:0)

目前无法实现这一目标。因为在Java 5之前,声明的字段的顺序是未定义的。在Java 6及更高版本中,保留了顺序。另一方面,Dalvik VM按照升序顺序对字段名称进行排序。最后,我通过将attribute订单添加到我的注释中解决了这个问题。