ChoiceFormat.setChoices путаница с типом параметров формата и документацией - PullRequest
0 голосов
/ 12 июня 2010

Из java.text.ChoiceFormat API:

setChoices(double[] limits, String[] formats): установите параметры, которые будут использоваться при форматировании.

Параметры:

  • limits - содержит [...]
  • formats - это форматы, которые вы хотите использовать для каждого ограничения.Это могут быть Format объекты или String s.При форматировании с объектом Y, если объект является NumberFormat, то вызывается ((NumberFormat) Y).format(X).В противном случае вызывается Y.toString().

У меня возникают трудности с пониманием документации для параметра formats: как вы можете передать объект Format/NumberFormat в setChoices, если онобъявлено String[] formats?

Обратите внимание, что интересно, аналог получателя setChoices объявлен следующим образом:

Это ошибка в API?Должен ли сеттер быть объявлен вместо setChoices(double[], Object[]), или я не понимаю, как правильно использовать setChoices?

Ответы [ 3 ]

1 голос
/ 12 июня 2010

Вы можете проверить исходный код

В комментариях упоминается везде, ссылаясь на двойственность строк / форматеров, однако реализация копирует только строки

, например, форматирование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, и попытка форматирования не производится.

Я просто думаю, что функциональность была "забыта".

0 голосов
/ 12 июня 2010

Это определенно похоже на ошибку.форматы назначаются непосредственно переменной экземпляра String []. Исходный код .

0 голосов
/ 12 июня 2010

Это было сообщено и принято как Ошибка 6960866 .

A String[] никогда не может содержать instanceof Number/NumberFormat;это противоречит принципам каждого подтипа ООП.

Если вы посмотрите на исходный код, поле private будет объявлено как String[] choiceFormats, так что просто объявить setChoices(double[], Object[]) не простоисправить, и вместо этого нарушит код.Фактически, глядя на остальную часть кода, нет такой функциональности, как утверждается в документации: в коде нет ни теста instanceof Number, ни преобразования (NumberFormat).

Таким образом, учитывая текущийСостояние исходного кода, ошибка в документации, в которой утверждается, что функциональность невозможна и не реализована на самом деле.

Такая функциональность была бы очень хорошей , и, вероятно, должен существовать, но в настоящее время его нет, поэтому это также можно рассматривать как ошибку в исходном коде, в которой отсутствует реализация.

Ссылки

...