Domanda

java.text.ChoiceFormat API:

  

setChoices(double[] limits, String[] formats) :. Impostare le scelte da utilizzare nella formattazione

     

Parametri:

     
      
  • limits - contiene [...]
  •   
  • formats - sono i formati che si desidera utilizzare per ogni limite. Essi possono essere sia oggetti Format o Strings. Quando formattazione con oggetto Y, se l'oggetto è un NumberFormat, allora ((NumberFormat) Y).format(X) viene chiamato. In caso contrario, si chiama Y.toString().
  •   

Sto avendo difficoltà a capire la documentazione per il parametro formats: come si fa a passare un oggetto Format/NumberFormat per setChoices se è dichiarata String[] formats

Si noti che è interessante notare che, il getter controparte di setChoices sono dichiarati come segue:

Si tratta di un bug nel API? Se il setter sono state dichiarate setChoices(double[], Object[]) invece, o sto non capire come usare setChoices correttamente?

È stato utile?

Soluzione 3

Questo è stato segnalato e accettato come Bug 6.960.866 .

Un String[] non può mai contenere un instanceof Number/NumberFormat; che va contro ogni OOP sottotipizzazione principi.

Se si guarda il codice sorgente, il campo private è dichiarato come String[] choiceFormats , così semplicemente dichiarando setChoices(double[], Object[]) non è una soluzione semplice, e sarebbe invece rompere il codice. In effetti, guardando il resto del codice, non v'è alcuna funzionalità come quanto sostiene la documentazione:. Non esiste un test instanceof Number, non ovunque (NumberFormat) cast il codice

Quindi, allo stato attuale del codice sorgente, l'errore è nella documentazione, che rivendica la funzionalità che è possibile né effettivamente attuato.

Tale funzionalità sarebbe molto bello di avere, e, probabilmente, dovrebbe esiste, ma attualmente non è così, quindi questo può anche essere visto come un bug nel codice codice, che manca l'implementazione.

Bibliografia

Altri suggerimenti

È possibile controllare il codice sorgente

Ovunque si fa menzione nei commenti riferendosi alla dualità di stringa / formattatore, tuttavia l'applicazione copia solo le stringhe

es. formattazione di un doppio:

        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]);
        }

Nel ritorno chiaramente vederlo solo copie dalla StringArray e nessun tentativo di formato è fatto.

I basti pensare che la funzionalità è stata 'dimenticata'.

Si presenta sicuramente come un insetto. formati è assegnato direttamente ad una variabile di istanza String []. codice sorgente .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top