2013-04-23 2 views
2
function checkValue(value) { 
    if (value === null || value === undefined || value === '') { 
     return '-'; 
    } else { 
     switch (value) { 
     case true: 
      return 'Yes'; 
      break; 
     case false: 
      return 'No'; 
      break; 
     default: 
      return value; 
      break; 
     } 
    } 
} 

Я знаю, что корпус коммутатора по строке доступен только 1.7. Есть ли в любом случае я могу конвертировать этот кусок кода в Java без использования традиционных if/else. Этот фрагмент кода написан в JavaScript.Корпус выключателя в java строками <1.7

+2

Я бы предпочел, если/else, но вы можете создать и использовать перечисление. – BobTheBuilder

+0

Вы можете использовать перечисления для переключения Представить строки как перечисления –

ответ

1

Вы можете использовать Enum для этого, как это:

enum MyEnum { 

    A1, A2, A3; 

} 

String val = "myVal"; // your input 

MyEnum enumVal; 
try { 
    enumVal = MyEnum(val); 
} catch (IllegalArgumentException iae) { 
    enumVal = null; 
} 

switch (enumVal) { 

    case A1: 
     doSomething(); 
     break; 

    case A2: 
     doOtherStuff(); 
     break; 

    default: 
     doDefault(); 
     break; 

} 

Если вы думаете, что блок попытка слишком некрасиво вы можете использовать EnumUtils из apache commons lang, что будет делать вещи для вас, вам просто нужно изменить :

MyEnum enumVal; 
try { 
    enumVal = MyEnum(val); 
} catch (IllegalArgumentException iae) { 
    enumVal = null; 
} 

с этим:

MyEnum enumVal = EnumUtils.getEnum(MyEnum.class, val); 

EDIT

Для случая вы хотите фильтр только булевых значения, которые не являются строками, вы могли бы сделать что-то вроде:

Object input = "MyString"; 

if (input == Boolean.TRUE) { 
    return "Yes"; 
} else if (input == Boolean.FALSE) { 
    return "No"; 
} else { 
    return input; 
} 

Если они являются строками, необходимо сравнить строку сам нравятся:

if ("true".equals(input)) { 
    return "Yes"; 
} else if ("false".equals(input)) { 
    return "No"; 
} else { 
    return input; 
} 
+0

Может не мы булевы значения в перечислений частных перечислений MyEnum { \t \t истинные, ложные \t} – theJava

+0

вам это нужно истина/ложь? В этом случае проще (и это именно так), чтобы использовать оператор 'if' и' Boolean.parseBoolean (String value) ', который вернет' true', когда 'String' равно' .equals' to '" true "и" false "в противном случае. –

+0

да, мне нужно это для true/false ... я получаю от службы как истину или ложь, и мне нужно отображать «да» или «нет» в переднем конце – theJava

6

Использования вместо перечисления в < 1,7 переключатель на струнах обыкновения поддерживать

private enum MyEnum { 
     a, b, c, d; 
    } 

    String val; // input 
    MyEnum mye = MyEnum.valueOf(val); 

    switch (mye) { 
     case a: 
      return something; 
     case carrot: 
      return something; 
     .. 
    } 

P.S: псевдокод. IDE не в руке.

+0

Tom and Kamal: Спасибо за редактирование –

+0

, чтобы покрыть случай 'default', вы можете выполнить valueOf внутри try catch, присваивая ему« null »ему при исключении или использовании 'EnumUtils' из apache commons, чтобы получить значение перечисления без исключения исключения, а затем выполнить случай переключения. –

+0

На самом деле гораздо больше скрывается за кодом JavaScript, чем просто случай переключения (проверка типов, неявное литье типов и т. Д.). Сам корпус коммутатора использует только логические условия и может быть реализован на Java так же, как и без использования перечислений. – jarnbjo

Смежные вопросы