1

以下に示すような静的クラスを持つ Builder パターンがあります。

public final class DataKey {

    private DataKey(Builder builder) {

    }

    public static class Builder {
        protected int maxCount = 3;

        // ..some other code here

        /**
         * This should be greater than 0 and less than equal to {@value Builder#maxCount}.
         * 
         * @param count
         * @throws IllegalArgumentException if count is less than 0 and greater than {@value Builder#maxCount}.
         * @return Builder object
         */         
        public Builder addCount(int count) {
            checkArgument(count > 0 && count < (maxCount + 1),
                    "maxCount should be greater than 0 and less than " + (maxCount + 1));
            this.maxCount = count;
            return this;
        }           
    }
}

addCountここで、メソッドに Javadoc を追加してmaxCount、実際の数値をハードコーディングせずに値を表示できるようにします。を使用してみ{@value Builder#maxCount}ましたが、そのメソッドで Javadoc を検索すると値 3 が表示されませんか? 私はここで何をしているのですか?

4

2 に答える 2

2
public static class Builder {
    protected static final int DEFAULT_MAX_COUNT = 3;
    /** count cannot be set to a value higher than this. By default, the value is {@value Builder#DEFAULT_MAX_COUNT}. */
    protected int maxCount = DEFAULT_MAX_COUNT;
    protected int count;

    // ..some other code here

    /**
     * This should be greater than 0 and less than equal to {@link Builder#maxCount}. By default,  {@value Builder#DEFAULT_MAX_COUNT}.
     * 
     * @param count
     * @throws IllegalArgumentException if count is less than 0 and greater than {@link Builder#maxCount}.
     * @return Builder object
     */         
    public Builder setCount(int count) {
        checkArgument(count > 0 && count < (maxCount + 1),
                "count should be greater than 0 and less than " + (maxCount + 1));
        this.count = count;
        return this;
    }

    /** ... */
    public Builder setMaxCount(int maxCount){
        checkArgument(count > 0, "maxCount must be greater than 0"); 
        this.maxCount = maxCount;
    }

    /** ... */
    public int getMaxCount(int maxCount){
         return this.maxCount;
    }

}

IMO、セッターとゲッターをmaxCountinに持つことは意味がなくBuilder、代わりに定数の最大値にする必要があります(DEFAULT_MAX_COUNT)。

プログラムの実行中にドキュメントが変更されないため、javadoc は動的変数の値を表示できません。javadoc は単なるテキストであり、実行中のプログラムがないため、値を更新できません。これは、目覚まし時計 (プログラム) に付属するマニュアル (javadoc) と考えてください。マニュアルには、あらゆる種類の便利な機能や時計の使い方が記載されていますが、アラームが何に設定されているかはわかりません (変更されることはないため)。{@value ..}時計のシリアルナンバーのようなものです。時計を「梱包」している人は、実際のシリアル番号を知っており、.

ps。これがあなたが実際に探しているものに沿っていることを完全に願っています:

public static class Builder {
    protected static final int MAX_MAX_COUNT = 3;
    /** By default, the value is {@value Builder#MAX_MAX_COUNT}. */
    protected int maxCount = MAX_MAX_COUNT;

    // ..some other code here

    /**
     * This should be greater than 0 and less than equal to {@value Builder#MAX_MAX_COUNT}.
     * 
     * @param maxCount
     * @throws IllegalArgumentException if maxCount is less than 0 and greater than {@link Builder#MAX_MAX_COUNT}.
     * @return Builder object
     */         
    public Builder setMaxCount(int maxCount) {
        checkArgument(maxCount > 0 && maxCount < (MAX_MAX_COUNT + 1),
                "count should be greater than 0 and less than " + (MAX_MAX_COUNT + 1));
        this.maxCount = maxCount;
        return this;
    }
}
于 2016-01-20T02:06:36.940 に答える
1

これは、定数に対してのみ実行できます。変数 static final を作成すると機能します。

于 2016-01-20T01:07:44.830 に答える