0

java.text.ChoiceFormatAPIから:

setChoices(double[] limits, String[] formats): 書式設定で使用する選択肢を設定します。

パラメーター:

  • limits- [...] を含む
  • formats- 各制限に使用する形式です。FormatオブジェクトまたはのいずれかですString。object でフォーマットするY場合、オブジェクトが の場合、NumberFormat((NumberFormat) Y).format(X)呼び出されます。それ以外の場合Y.toString()は呼び出されます。

パラメータのドキュメントを理解するのに苦労しています:オブジェクトが宣言されている場合、オブジェクトをformatsどのように渡すことができますか?Format/NumberFormatsetChoicesString[] formats

興味深いことに、 の gettersetChoicesは次のように宣言されていることに注意してください。

これは API のバグですか? 代わりにセッターを宣言する必要がありますか、それとも正しくsetChoices(double[], Object[])使用する方法を理解していませんか?setChoices

4

3 に答える 3

1

ソースコードを確認できます

文字列/フォーマッタの二重性を参照するコメントでどこでも言及されていますが、実装は文字列のみをコピーします

例: double のフォーマット:

        public StringBuffer format(double number, StringBuffer toAppendTo,
                FieldPosition status) {
            // find the number
            int i;
            for (i = 0; i < choiceLimits.length; ++i) {
                if (!(number >= choiceLimits[i])) {
                    // same as number < choiceLimits, except catchs NaN
                    break;
                }
            }
            --i;
            if (i < 0)
                i = 0;
            // return either a formatted number, or a string
            return toAppendTo.append(choiceFormats[i]);
        }

戻り値では、stringarray からコピーしただけで、フォーマットしようとしていないことがはっきりとわかります。

機能が「忘れられていた」と思います。

于 2010-06-12T09:37:55.387 に答える
0

これはBug 6960866として報告され、承認されています。

Aに;String[]を含めることはできません。instanceof Number/NumberFormatこれは、すべての OOP サブタイピングの原則に反します。

ソース コードを見ると、privateフィールドは として宣言されてString[] choiceFormatsいるため、単純に宣言するだけsetChoices(double[], Object[])では簡単に修正できず、代わりにコードが壊れてしまいます。実際、コードの残りの部分を見ると、ドキュメントが主張するような機能はありません。コードのどこにもinstanceof Numberテストも(NumberFormat)キャストもありません。

このように、ソース コードの現在の状態を考えると、バグはドキュメントにあり、機能は可能でも実際には実装されていないと主張しています。

このような機能があれば非常に便利で、おそらく存在するはずですが、現在は存在しないため、実装が欠落しているソース コードのバグと見なすこともできます。

参考文献

于 2010-06-12T09:36:31.130 に答える
0

それは間違いなくバグのように見えます。フォーマットは String[] インスタンス変数に直接割り当てられます。ソースコード

于 2010-06-12T09:36:40.833 に答える