带开关的Android编码(String)

时间:2013-01-16 20:52:28

标签: java android string switch-statement

当我尝试使用像

这样的代码时,我正在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(){}
........

6 个答案:

答案 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版本。这就是为什么你不得不忘记这些结构的一段时间。

您可以通过存储将对某些StringMap<String, Method>执行的方法地图来避免使用if-statements-chain。您始终可以使用某个Method对象封装Handler它。点击此处了解更多信息:How to remove large if-else-if chain

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

答案 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