Se costruire in chiamata hashmap.put
Domanda
Ho una variabile di tipo Hashmap <String,Integer
> ;.
In questo, il valore Integer potrebbe dover subire delle modifiche a seconda del valore di una variabile flag. L'ho fatto così ...
Hashmapvariable.put( somestring,
if (flag_variable) {
//manipulation code goes here
new Integer(manipulated value);
} else {
new Integer(non-manipulated value);
}
);
Ma ricevo un errore:
Errore di sintassi su token (s), fuori posto costrutti.
alla chiamata Hashmapvariable.put.
Ricevo anche un altro errore
Errore di sintassi sul token ") " ;, eliminalo token.
alla fine "); " linea. Ma non riesco a cancellare il & Quot;) & Quot; - Sono le parentesi di chiusura per la chiamata del metodo put.
Non capisco. Che errore sto facendo?
Soluzione
Non è possibile inserire un'istruzione nella chiamata al metodo.
Tuttavia, un'opzione potrebbe essere quella di creare un metodo che restituisca un Integer
come:
private Integer getIntegerDependingOnFlag(boolean flag)
{
if (flag)
return new Integer(MANIPULATED_VALUE);
else
return new Integer(NON-MANIPULATED_VALUE);
}
Quindi, puoi effettuare una chiamata in questo modo:
hashmap.put(someString, getIntegerDependingOnFlag(flag));
Altri suggerimenti
new Integer(flag_variable ? manipulated value : non-manipulated value)
Fa il trucco
Modifica: Su Java 5, suppongo che tu possa anche scrivere
hashmap.put(someString, flag_variable ? manipulated value : non-manipulated value)
a causa del boxing automatico.
Questo non è uno schema, quindi se le istruzioni non valutano un valore. Dovrai usare un tri-if-cosa (il nome mi sfugge per qualche motivo in questo momento) o creare una funzione, come ha detto qualcun altro.