Un Commutateur de Java problème : le cas des expressions doivent être des expressions constantes

J'ai un problème dans mon switch/case déclaration. Le message d'erreur indique : "Cas des expressions doivent être des expressions constantes". Je comprends l'erreur, et je peux le résoudre à l'aide de Si mais quelqu'un peut-il me dit pourquoi le cas de l'expression doit être une constante dans un switch/case.
Un exemple de code de mon erreur :

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

Merci pour votre explication!!!

  • Pourquoi êtes-vous à l'aide de findViewById().getItemId()? Si vous avez déjà l'id, vous n'avez pas besoin d'obtenir de l'élément pour obtenir l'id!
  • instructions de commutation sont une mauvaise odeur... je vous recommande de regarder dans l'utilisation du polymorphisme ou de l'adaptateur afin de parvenir à une meilleure recherche de code. En outre, vous pouvez éviter de tels problèmes tout à fait.
  • Je suis d'accord, spécialement lorsque la condition se répète assez souvent. Si vous l'utilisez rarement, il peut être ok. Aussi, je l'utilise parfois avec le polymorphisme pour créer l'initiale de béton instance.
  • Depuis Dimitri utilisant Android, son MenuItem objets sont susceptibles défini en xml et (à ma connaissance) ne peut pas être facilement sous-classé, sans renoncer à la simplicité de MenuInflater.inflate().
InformationsquelleAutor Dimitri | 2011-01-20