使用getFields()
和getDeclaredFields()
获取字段列表时,Java class
中字段的顺序未定义。
我需要在验证库中使用此订单。由于订单未被保留(尽管有些人声称订单在JDK 6及更高版本中保留,但不能保证跨VM)。我无法推测这一点,因为跨字段的注释顺序对于库来说是绝对必要的。
解决此问题的一种方法是在order
中拥有index
或Annotation
属性。
令我担心的是,在以下情况下维护代码可能会变得有点麻烦。
order
或index
作为浮点数 - 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;
答案 0 :(得分:0)
我会说排序不是类本身固有的,而是取决于使用它的类。所以我会考虑忘记修改原始类并添加一个properties
文件(可能与该类的名称相同)来定义顺序。
如果您需要稍后添加项目,请不要逐步排序,但是(比如说)10 by 10.第一种方法有索引1,第二种方法有索引11,依此类推。你不可能重新索引它,如果你这样做,重新索引属性文件很容易通过手工/程序完成。
答案 1 :(得分:0)
目前无法实现这一目标。因为在Java 5之前,声明的字段的顺序是未定义的。在Java 6及更高版本中,保留了顺序。另一方面,Dalvik VM按照升序顺序对字段名称进行排序。最后,我通过将attribute
订单添加到我的注释中解决了这个问题。