Je développe une application Android sur Eclipse, lorsque j'essaie du code comme
switch(String){
......
}
ça me donne l'erreur suivante
Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum variables are permitted
donc j'ai changé le compilateur à 1.7, alors il me donne une autre erreur
Android requires compiler compliance level 5.0 or 6.0. Found '1.7' instead. Please use Android Tools > Fix Project Properties.
Alors, y a-t-il un moyen de laisser switch (String) fonctionner dans les applications Android?
if(){}
else if(){}
else if(){}
........
L'instruction switch
sur les objets String
est une nouvelle fonctionnalité introduite dans Java 1.7. Malheureusement, Android nécessite la version 1.6 ou 1.5. C'est pourquoi vous devez oublier pendant un certain temps de telles constructions.
Vous pouvez éviter d'utiliser if-statement-chain en stockant la mappe des méthodes qui seront exécutées pour certaines String
: Map<String, Method>
. Vous pouvez toujours encapsuler Method
avec un objet Handler
. Regardez ici pour plus d’informations: Comment supprimer une grande chaîne if-else-if
et
Avec la sortie de l'API 19 KitKat, vous pouvez maintenant le faire !!!! C'est le changement dont vous avez besoin pour Android studio pour les projets existants. assurez-vous que vous utilisez JDK 1.7 ou version ultérieure et Gradle plugin 0.6.1 ou version ultérieure
Android { compileSdkVersion 19 buildToolsVersion "19.0.0" defaultConfig { minSdkVersion 7 targetSdkVersion 19 } compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } }
Tu n'as pas le choix. Vous ne pouvez pas travailler Switch
avec des chaînes (du moins pour le moment). Le message suivant est explicitement conforme à cela.
Android requiert le niveau de conformité du compilateur 5.0 ou 6.0. Trouvé '1.7' à la place
Vous pouvez le faire avec les derniers outils de construction Android. Android a commencé à supporter Java 7 depuis l’API 19.
La meilleure partie est que cela fonctionnera même si vous définissez votre minSdkVersion sur une valeur inférieure à 19. Citation de cette page de développeur Android :
Notez que vous pouvez utiliser minSdkVersion avec une valeur antérieure à 19, pour toutes les fonctionnalités de langage, à l'exception de l'essai avec des ressources. Si vous souhaitez utiliser try avec des ressources, vous devez également utiliser une minSdkVersion de 19.
Voici une autre alternative pour Android avec Java 5 ou 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;
}
Puisque je suppose que la plupart des gens utilisent Android Studio avec au moins Java 7 au minimum, la réponse est maintenant Oui, vous pouvez changer de chaîne dans Android, même pour les versions minSdkVersion <19. Voici un exemple pour le faire, tiré de Java SE Documentation :
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;
}
Les docs notent également:
if
-else
.String.equals
.