2

getFields()とを使用してフィールドのリストを取得する場合getDeclaredFields()、aのフィールドの順序Java classは定義されていません。

検証ライブラリでこの順序が必要です。順序は保持されないため(ただし、順序はJDK 6以降で保持されるが、VM間で保証されないという主張もあります)。フィールド間の注釈の順序はライブラリにとって絶対に不可欠であるため、これについて推測することはできません。

これを回避する1つの方法は、私のにorderまたはindex属性を含めることAnnotationです。

私が心配しているのは、次の場合にコードを維持するのが少し面倒になる可能性があることです。

  1. 使用者が新しい注釈付きフィールドを挿入したい場合は、クラス内の他のすべての注釈の番号を付け直す必要がある場合があります。
  2. 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;
4

2 に答える 2

0

順序はクラス自体に固有のものではなく、それを使用するクラスによって異なります。したがって、元のクラスを変更することを忘れてproperties、順序を定義するためにファイル(おそらくクラスの同じ名前を持つ)を追加することを検討します。

後でアイテムを追加する必要がある場合は、順序を1 x 1ではなく、(たとえば)10 x 10にします。最初のメソッドにはインデックス1があり、2番目のメソッドにはインデックス11があります。インデックスを再作成する必要はほとんどありません。再インデックスを作成する場合は、プロパティファイルのインデックスを手動/プログラムで簡単に再作成できます。

于 2012-10-22T10:58:02.813 に答える
0

現在、これを達成する手段はありません。Java 5までは、宣言されたフィールドの順序は未定義であるためです。Java 6以降では、順序は保持されます。一方、Dalvik VMは、フィールド名を名前に従って昇順で並べ替えます。最後にattribute、注釈に順序を追加することでこの問題を解決しました。

于 2012-10-23T07:22:42.153 に答える