Подтвердить что ты не робот

Android-кодирование с помощью переключателя (String)

Я разрабатываю приложение для Android на eclipse, когда я пытаюсь использовать какой-то код, например

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(){}
........
4b9b3361

Ответ 1

Оператор

switch на объектах String - это новая функция, введенная в Java 1.7. Unfortunatelly Android требует версии 1.6 или 1.5. Вот почему вам приходится некоторое время забывать о таких конструкциях.

Вы можете избежать использования цепочки if-statements, сохранив карту методов, которая будет выполнена для определенного String: Map<String, Method>. Вы можете инкапсулировать Method его с помощью некоторого объекта Handler. Дополнительную информацию смотрите здесь: Как удалить большую цепочку if-else-if

и

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

Ответ 2

С выпуском API 19 KitKat вы можете сделать это!!!! Это изменение, которое вам нужно для студии android для существующих проектов. убедитесь, что вы используете 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
} }

Ответ 3

У тебя нет выбора. Вы не можете работать Switch со строками (по крайней мере пока). Следующее сообщение явно соответствует этому.

Для Android требуется уровень соответствия компилятора 5.0 или 6.0. Вместо "1.7" вместо

Ответ 4

Вы можете сделать это с помощью новейших инструментов сборки Android. Android начал поддерживать Java 7 с API 19.

Лучшая часть заключается в том, что он будет работать, даже если вы установите minSdkVersion ниже 19. Выражение этой страницы разработчика Android:

Обратите внимание, что вы можете использовать minSdkVersion со значением раньше 19, для всех языковых функций, кроме try с ресурсами. Если вы хотите использовать try с ресурсами, вам также нужно будет использовать minSdkVersion 19.

Ответ 5

Вот еще одна альтернатива для Android с 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;
}

Ответ 6

Так как я предполагаю, что большинство людей используют Android Studio с хотя бы минимум Java 7, то теперь ответ: Да, вы можете переключать Strings в Android, даже для версий minSdkVersion < 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.