Codificación de Android con el interruptor (cadena)

Estoy desarrollando una aplicación para Android en eclipse, cuando pruebo algún código como

switch(String){ ...... } 

me da el siguiente error

 Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum variables are permitted 

así que cambié el comstackdor a 1.7, entonces me da otro error

 Android requires compiler compliance level 5.0 or 6.0. Found '1.7' instead. Please use Android Tools > Fix Project Properties. 

Entonces, ¿hay alguna forma de dejar que Switch (String) funcione en la aplicación de Android? o no tengo más remedio que usar

 if(){} else if(){} else if(){} ........ 

switch instrucción switch en objetos String es una nueva característica introducida en Java 1.7. Desafortunadamente, Android requiere la versión 1.6 o 1.5. Es por eso que tienes que olvidar por un tiempo acerca de tales construcciones.

Puede evitar el uso de if-statements-chain almacenando el mapa de métodos que se ejecutará para cierta String : Map . Siempre puede encapsular el Method con algún objeto Handler . Mire aquí para más información: Cómo eliminar la cadena if-else-if grande

y

why-cant-i-switch-on-a-string

Con el lanzamiento de KitKat API 19 ahora puede hacer esto. Este es el cambio que necesita para Android Studio para proyectos existentes. asegúrese de estar utilizando JDK 1.7 o posterior y el plugin de Gradle 0.6.1 o posterior

 android { compileSdkVersion 19 buildToolsVersion "19.0.0" defaultConfig { minSdkVersion 7 targetSdkVersion 19 } compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } } 

No tienes elección. No puedes trabajar Switch with Strings (al menos por ahora). El siguiente mensaje explícitamente cumple eso.

Android requiere el nivel de cumplimiento del comstackdor 5.0 o 6.0. Encontrado ‘1.7’ en su lugar

Puede hacer esto con las últimas herramientas de comstackción de Android. Android comenzó a soportar la característica Java 7 desde la API 19.

La mejor parte es que funcionará incluso si configura su minSdkVersion por debajo de 19. Citando esta página de desarrollador de Android :

Tenga en cuenta que puede usar minSdkVersion con un valor anterior a 19, para todas las funciones de idioma, excepto que pruebe con recursos. Si quieres probar con recursos, necesitarás también usar una minSdkVersion de 19.

Aquí hay otra alternativa para android con java 5 o 6

 public enum Command {text, image, other}; String enumTest = "text"; try{ Command command = Command.valueOf(enumTest); } catch(Exception e){ Log.e("Tag", "Command not found: " + enumTest); } switch (command){ case image: break; case text: break; } 

Como supongo que la mayoría de la gente usa Android Studio con al menos un mínimo de Java 7, la respuesta ahora es: Sí, puede cambiar cadenas en Android , incluso para las versiones minSdkVersion <19. Aquí hay un ejemplo de cómo hacerlo, tomado de la documentación de Java SE :

 public String getTypeOfDayWithSwitchStatement(String dayOfWeekArg) { String typeOfDay; switch (dayOfWeekArg) { case "Monday": typeOfDay = "Start of work week"; break; case "Tuesday": case "Wednesday": case "Thursday": typeOfDay = "Midweek"; break; case "Friday": typeOfDay = "End of work week"; break; case "Saturday": case "Sunday": typeOfDay = "Weekend"; break; default: throw new IllegalArgumentException("Invalid day of the week: " + dayOfWeekArg); } return typeOfDay; } 

Los documentos también tienen en cuenta:

  • El uso de la conmutación de cadenas generalmente es más rápido que el encadenado ifelse .
  • Es como si cada caso estuviera usando String.equals .