フィールドの注釈を取得することはできません。
"Util"メソッドを呼び出しているときは、それを渡すのはフィールドの値だけです。アノテーションにアクセスするのに十分な情報がありません。ここで
は、私は私の「使用率」メソッドにフィールドが含まれることをオブジェクトのインスタンスとフィールドの名前を渡している
public class SomeClass {
@Digits(fraction = 2, integer = 16)
private BigDecimal amount;
private void setAmount(double d) {
amount = BigDecimal.valueOf(d);
amount.setScale(Util.getFraction(this, "amount"));
}
public static void main(String[] args) {
new SomeClass().setAmount(12.3);
}
}
お知らせ...あなたはそれを行う可能性がある方法です。
それは今
public class Util {
public static int getFraction(Object obj, String fieldName) {
try {
Digits annotation = obj.getClass().getDeclaredField(fieldName).getAnnotation(Digits.class);
return annotation.fraction();
} catch (NoSuchFieldException | SecurityException e) {
// BOOM!
throw new IllegalStateException("Something went awfully wrong...", e);
}
}
}
属性_はありません。インスタンス変数ごとに 'Field'を作成し、それを使って対応する注釈を取得することができます。私はここにポイントが表示されません。とにかくあなたのソースコードにはハードコードされています。ちょうど2に設定してください。 –
私は、オブジェクト参照の対応するフィールドを実行時に取得できることを期待していましたが、実際には参照の注釈が必要でしたが、できないようです。だから、与えられた解決策は私のために良いです。 – weberjn
annotation.fraction()はintを返します。 また、指定されたBigDecimalでsetScale()を実行することはできません。これらは不変です。setScale()は新しいBigDecimalを返します。 – weberjn