web-dev-qa-db-ja.com

Androidスイッチによるコーディング(文字列)

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 application?

if(){}
else if(){}
else if(){}
........
36
jing1988ccc

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

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

そして

理由-i-switch-on-a-string

36
Adam Sznajder

API 19 KitKatのリリースにより、これが可能になりました!!!!これは、Android既存のプロジェクトのスタジオに必要な変更です。JDK1.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
} }
93
Ryan Heitner

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

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

6
kosa

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

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

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

5

Android with 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;
}
3
Juan Giorello

ほとんどの人がAndroid最低でもJava 7以上のStudioを使用していると仮定するので、答えははい、minSdkVersionバージョン<19の場合でもAndroidで文字列を切り替えることができます。 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を使用しているかのようです。
0
Suragch