Un problema de Switch Java: las expresiones de caso deben ser expresiones constantes

Tengo un problema en mi declaración de cambio / caso. El error dice: "Las expresiones de caso deben ser expresiones constantes". Entiendo el error y puedo resolverlo usando If, pero alguien puede decirme por qué la expresión de caso debe ser constante en un interruptor / caso. Un ejemplo de código de mi error:

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

Gracias por tu explicación !!

Respuestas a la pregunta(3)

Su respuesta a la pregunta