Android编码与开关(string)

我在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. 

那么,有没有让开关(String)在Android应用程序中工作? 否则我不得不使用

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

String对象上的switch语句是Java 1.7中引入的新特性。 不幸的Android需要版本1.6或1.5。 这就是为什么你不得不忘记一些这样的build设。

你可以通过存储将被执行的某些String的方法映射来避免使用if-statements-chain: Map<String, Method> 。 你总是可以用一些Handler对象封装Method 。 在这里寻找更多的信息: 如何去除大的if-else-if链

为什么-着-I-接通,一个串

随着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 } } 

你没有select。 您不能使用stringSwitch (至less现在)。 以下消息明确表示符合。

Android需要编译器符合性级别5.0或6.0。 发现'1.7'

你可以用最新的android构build工具来做到这一点。 Android从API 19开始支持Java 7function。

最好的部分是,即使你设置你的minSdkVersion低于19,它也能工作。引用这个android开发者页面 :

请注意,对于除尝试资源之外的所有语言function,您可以使用minSdkVersion的值早于19。 如果你想使用资源尝试,你还需要使用19的minSdkVersion。

这是Java 5或6的Android的另一种select

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

因为我认为大多数人在使用Android Studio时至less使用了Java 7,现在的答案是, 是的,您可以在Android中切换Strings ,即使是minSdkVersion版本<19也是如此。取自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; } 

文件还指出:

  • 使用string切换通常比链接ifelse更快。
  • 就好像每个案例都使用String.equals