2

使用getFields()and获取字段列表时, a 中字段getDeclaredFields()的顺序Java class是不确定的。

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

解决这个问题的一种方法是orderindex我的Annotation.

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

  1. 如果用户想要插入一个新的注释字段,他可能必须重新编号类中的所有其他注释。
  2. 我可以将orderorindex作为浮点数 -float或者double但是,如果有 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;
4

2 回答 2

0

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

如果您稍后需要添加项目,请不要按 1 到 1 而是(例如)10 到 10 进行排序。第一种方法的索引为 1,第二种方法的索引为 11,依此类推。您不太可能需要重新索引它,并且如果您这样做,重新索引属性文件很容易通过手动/程序完成。

于 2012-10-22T10:58:02.813 回答
0

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

于 2012-10-23T07:22:42.153 回答