当我尝试使用像
这样的代码时,我正在eclipse上开发一个Android应用程序switch(String){
......
}
它给我以下错误
Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum variables are permitted
所以我将编译器更改为1.7,然后它给了我另一个错误
Android requires compiler compliance level 5.0 or 6.0. Found '1.7' instead. Please use Android Tools > Fix Project Properties.
那么,有没有让switch(String)在android应用程序中运行? 或者我别无选择,只能使用
if(){}
else if(){}
else if(){}
........
答案 0 :(得分:92)
随着API 19 KitKat的发布,你现在可以做到这一点!这是android studio对现有项目所需的更改。确保您使用的是JDK 1.7或更高版本以及Gradle插件0.6.1或更高版本
android { compileSdkVersion 19 buildToolsVersion "19.0.0" defaultConfig { minSdkVersion 7 targetSdkVersion 19 } compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } }
答案 1 :(得分:36)
switch
对象上的 String
语句是Java 1.7中引入的新功能。不幸的是,Android需要1.6或1.5版本。这就是为什么你不得不忘记这些结构的一段时间。
您可以通过存储将对某些String
:Map<String, Method>
执行的方法地图来避免使用if-statements-chain。您始终可以使用某个Method
对象封装Handler
它。点击此处了解更多信息:How to remove large if-else-if chain
和
答案 2 :(得分:6)
你别无选择。你不能用字符串Switch
工作(至少现在)。以下消息明确地符合。
Android需要编译器合规性级别5.0或6.0。发现'1.7'而不是
答案 3 :(得分:5)
您可以使用最新的Android构建工具执行此操作。自API 19以来,Android开始支持Java 7功能。
最好的部分是,即使您将minSdkVersion设置为低于19,它也会起作用。引用此android developer page:
请注意,除了尝试使用资源外,您可以将minSdkVersion的值设置为早于19的所有语言功能。如果你想使用try with resources,你还需要使用19的minSdkVersion。
答案 4 :(得分:3)
以下是使用java 5或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;
}
答案 5 :(得分:0)
由于我假设大多数人使用的Android Studio至少具有至少Java 7,因此现在的答案是,是的,您可以在Android中切换字符串,即使对于minSdkVersion版本&lt; 19.以下是如何执行此操作的示例,取自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;
}
文档还注意到:
if
- else
更快。String.equals
。