带开关的Android编码(String)

jin*_*ccc 38 java string android switch-statement

我在eclipse上开发一个Android应用程序,当我尝试一些类似的代码

switch(String){
 ......
}
Run Code Online (Sandbox Code Playgroud)

它给我以下错误

Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum variables are permitted
Run Code Online (Sandbox Code Playgroud)

所以我将编译器更改为1.7,然后它给了我另一个错误

Android requires compiler compliance level 5.0 or 6.0. Found '1.7' instead. Please use Android Tools > Fix Project Properties.
Run Code Online (Sandbox Code Playgroud)

那么,有没有让switch(String)在Android应用程序中工作?或者我别无选择只能使用

if(){}
else if(){}
else if(){}
........
Run Code Online (Sandbox Code Playgroud)

Rya*_*ner 94

随着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
} }
Run Code Online (Sandbox Code Playgroud)

  • 如果我这样做,我的应用程序是否可以在比API 19更爱的手机上工作? (11认同)
  • @Eddwhis是的,它仍然可以使用!来源:经过测试的`开关("测试"){案例"测试":Log.e("Yay","It Works"); 打破; 在API 18上! (5认同)

Ada*_*der 37

switchString对象语句是Java 1.7中引入的一个新特性.不幸的是,Android需要1.6或1.5版本.这就是为什么你不得不忘记一些这样的结构.

您可以通过存储将要执行的方法映射来避免使用if-statements-chain String: Map<String, Method>. 您始终Method可以使用某个Handler对象封装它.在这里查看更多信息:如何删除大型if-else-if链

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

  • 这个答案在KitKat发布时已被弃用.查看[最新答案](http://stackoverflow.com/questions/14367629/android-coding-with-switch-string/19722741#19722741) (28认同)

kos*_*osa 6

你没有选择.你不能Switch使用字符串(至少现在).以下消息明确地符合.

Android需要编译器合规性级别5.0或6.0.找到'1.7'而不是


Shu*_*ary 5

您可以使用最新的Android构建工具执行此操作.自API 19起,Android开始支持Java 7功能.

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

请注意,除了尝试使用资源之外,您可以将minSdkVersion的值设置为早于19的所有语言功能.如果你想使用try with resources,你还需要使用19的minSdkVersion.