web-dev-qa-db-ja.com

Javaでパラメータの注釈を取得する方法は?

私は新しいJava=プログラマーです。以下は私のコードです。

_    public void testSimple1(String lotteryName,
                        int useFrequence,
                        Date validityBegin,
                        Date validityEnd,
                        LotteryPasswdEnum lotteryPasswd,
                        LotteryExamineEnum lotteryExamine,
                        LotteryCarriageEnum lotteryCarriage,
                        @TestMapping(key = "id", csvFile = "lottyScope.csv") xxxxxxxx lotteryScope,
                        @TestMapping(key = "id", csvFile = "lotteryUseCondition.csv") xxxxxxxx lotteryUseCondition,
                        @TestMapping(key = "id", csvFile = "lotteryFee.csv") xxxxxxxx lotteryFee)
_

すべての提出された注釈を取得したいと思います。注釈付きのフィールドとそうでないフィールドがあります。

method.getParameterAnnotations()関数の使用方法は知っていますが、3つの注釈を返すだけです。

どう対応するかわかりません。

私は次の結果を期待します:

_lotteryName - none
useFrequence- none
validityBegin -none
validityEnd -none
lotteryPasswd -none
lotteryExamine-none
lotteryCarriage-none
lotteryScope - @TestMapping(key = "id", csvFile = "lottyScope.csv")
lotteryUseCondition - @TestMapping(key = "id", csvFile = "lotteryUseCondition.csv")
lotteryFee - @TestMapping(key = "id", csvFile = "lotteryFee.csv")
_
29
fred

getParameterAnnotationsは、注釈を持たないパラメータには空の配列を使用して、パラメータごとに1つの配列を返します。例えば:

import Java.lang.annotation.*;
import Java.lang.reflect.*;

@Retention(RetentionPolicy.RUNTIME)
@interface TestMapping {
}

public class Test {

    public void testMethod(String noAnnotation,
        @TestMapping String withAnnotation)
    {
    }

    public static void main(String[] args) throws Exception {
        Method method = Test.class.getDeclaredMethod
            ("testMethod", String.class, String.class);
        Annotation[][] annotations = method.getParameterAnnotations();
        for (Annotation[] ann : annotations) {
            System.out.printf("%d annotatations", ann.length);
            System.out.println();
        }
    }
}

これは出力を与えます:

0 annotatations
1 annotatations

これは、最初のパラメーターに注釈がなく、2番目のパラメーターに1つの注釈があることを示しています。 (もちろん、注釈自体は2番目の配列になります。)

それはまさにあなたが望んでいるように見えるので、getParameterAnnotationsは「3つの注釈のみを返す」というあなたの主張に混乱しています。配列の配列が返されます。おそらく、返された配列をどうにかして平坦化しているのでしょうか?

39
Jon Skeet