Java 保持注释的顺序

Java 保持注释的顺序,java,android,annotations,Java,Android,Annotations,使用getFields()和getDeclaredFields()获取字段列表时,Java类中字段的顺序未定义 我的验证库中需要此订单。因为订单没有被保留(尽管有些人声称订单在JDK 6和更高版本中被保留,但在虚拟机中没有得到保证)。我不能对此进行推测,因为跨字段注释的顺序对于库来说是绝对必要的 解决这个问题的一种方法是在我的注释中使用顺序或索引属性 让我担心的是,在下面的情况下,代码的维护可能会变得有点麻烦 如果用户希望插入一个新的带注释的字段,那么他可能必须对类中的所有其他注释重新编号 我可

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

我的验证库中需要此订单。因为订单没有被保留(尽管有些人声称订单在JDK 6和更高版本中被保留,但在虚拟机中没有得到保证)。我不能对此进行推测,因为跨字段注释的顺序对于库来说是绝对必要的

解决这个问题的一种方法是在我的
注释中使用
顺序
索引
属性

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

  • 如果用户希望插入一个新的带注释的字段,那么他可能必须对类中的所有其他注释重新编号
  • 我可以将
    顺序
    索引
    作为浮点数-
    浮点数
    双浮点数
    ,但是,像1、1.5、2这样的顺序看起来不太好
  • 这个问题的优雅解决方案是什么

    下面是一个示例代码,您可以了解该问题:

    @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;
    

    我想说,排序不是类本身固有的,而是依赖于使用它的类。因此,我会考虑忘记修改原始类并添加<代码>属性文件(可能与类的名称相同)来定义顺序。


    如果你以后需要添加物品,不要一步一步地订购,而是(比如)十步一步地订购。第一种方法有索引1,第二种方法有索引11,依此类推。您不太可能需要重新编制索引,如果需要,可以手动/程序轻松地重新编制属性文件的索引。

    目前无法实现这一点。因为在Java5之前,声明字段的顺序是未定义的。在Java6及以上版本中,顺序是保留的。另一方面,Dalvik VM根据字段名的升序对字段名进行排序。最后,我通过将order
    属性添加到注释中解决了这个问题。

    将名称排序为字符串有什么不对?对我来说,这似乎是一种自然的排序方式(如果你更改了名称,你就是在更改方法)。@SJuan76请检查上面的代码,字符串排序将不是一种选择。似乎Dalvik VM按字段名称排序。我正在编写一个框架,它使用注释来验证UI小部件,因此我的类使用在其他类上声明的注释。