38

次のようなコードを試すと、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.

では、android アプリケーションで switch(String) を機能させる方法はありますか? もしくは使うしかない

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

6 に答える 6

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
} }
于 2013-11-01T07:48:32.253 に答える
38

switchオブジェクトに対するステートメントStringは、Java 1.7 で導入された新機能です。残念ながら、Android にはバージョン 1.6 または 1.5 が必要です。これが、そのような構造についてしばらく忘れる必要がある理由です。

String特定の:に対して実行されるメソッドのマップを保存することで、if-statements-chain の使用を避けることができますMap<String, Method>。いつでもオブジェクトMethodでカプセル化できHandlerます。詳細については、こちらを参照してください:大きな if-else-if チェーンを削除する方法

なぜ-cant-i-switch-on-a-string

于 2013-01-16T20:53:29.797 に答える
6

あなたは選択肢がありません。文字列を操作することはできませんSwitch(少なくとも今のところ)。次のメッセージは、明示的にそれに準拠しています。

Android では、コンパイラ コンプライアンス レベル 5.0 または 6.0 が必要です。代わりに「1.7」が見つかりました

于 2013-01-16T20:53:23.193 に答える
5

これは、最新の Android ビルド ツールを使用して行うことができます。Android は、API 19 以降、Java 7 機能のサポートを開始しました。

最良の部分は、minSdkVersion を 19 未満に設定しても機能することです。このAndroid 開発者ページを引用します。

リソースの試行を除くすべての言語機能で、minSdkVersion を 19 より前の値で使用できることに注意してください。リソースで try を使用する場合は、19 の minSdkVersion も使用する必要があります。

于 2015-08-26T11:42:50.923 に答える
3

Java 5または6を使用したAndroidの他の代替手段は次のとおりです

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;
}
于 2015-04-29T18:33:02.570 に答える