Ho un problema nella mia istruzione switch/case. L'errore dice: "Le espressioni del caso devono essere espressioni costanti". Comprendo l'errore e posso risolverlo usando If, ma qualcuno può dirmi perché l'espressione del caso deve essere costante in un interruttore/caso. Un esempio di codice del mio errore:A Cambia problema Java: le espressioni del caso devono essere espressioni costanti
public boolean onOptionsItemSelected(MenuItem item) {
int idDirectory = ((MenuItem) findViewById(R.id.createDirectory)).getItemId();
int idSuppression = ((MenuItem) findViewById(R.id.recycleTrash)).getItemId();
int idSeeTrash = ((MenuItem) findViewById(R.id.seeTrash)).getItemId();
switch (item.getItemId()) {
case idDirectory:
createDirectory(currentDirectory);
break;
case idSuppression:
recycleTrash();
break;
case idSeeTrash:
seeTrash();
break;
}
return super.onOptionsItemSelected(item);
}
Thx per la tua spiegazione !!
Perché stai usando 'findViewById() getItemId()'.? Se hai già l'id, non è necessario ottenere l'oggetto per ottenere l'id! Le dichiarazioni dei commutatori –
sono di cattivo odore ... Vi consiglio di utilizzare il polimorfismo o il modello dell'adattatore per ottenere un codice migliore. Inoltre puoi evitare del tutto problemi come questi. – Bnjmn
@Bnjmn Sono d'accordo, specialmente quando la condizione si ripete abbastanza spesso. Se lo si utilizza raramente, potrebbe essere ok. Inoltre, a volte lo uso con il polimorfismo per creare l'istanza concreta iniziale. – OscarRyz