2013-03-23 2 views
1

ifelse if 코드를 사용하여 특정 유형을 찾고 해당 값을 생성합니다. 나는 그것이 더 효율적으로 만드는 방법을 궁금해, 나는이 포럼에서 다음 게시물을 발견하지만 난 boolean 같은 유형이없는, 나의 유형 bollean.edm다른 열거 형을 사용하는 Java 1.6에서 문자열 용 스위치 사용

char.edm 다음 코드를 사용하는 방법이 있나요이다 내 경우를 지원하기위한 조정이 필요 하신가요?

public static void main(String[] args) throws InterruptedException { 
    String typeName = "Boolean"; 
    String memberValue = "memberValue"; 
    SwitchInputType type = Type.valueOf(typeName).makeType(memberValue); 
} 

enum Type { 
    Boolean { 
     SwitchInputType makeType(String memberValue) { 
      return new SwitchInputType<Boolean>(new Boolean(memberValue)); 
     } 
    }, 
    Double { 
     SwitchInputType makeType(String memberValue) { 
      return new SwitchInputType<Double>(new Double(memberValue)); 
     } 
    }, 
    Int32 { 
     SwitchInputType makeType(String memberValue) { 
      return new SwitchInputType<Integer>(new Integer(memberValue)); 
     } 
    }; 

    // All must do this. 
    abstract SwitchInputType makeType(String memberValue); 
} 

static class SwitchInputType<T> { 
    public SwitchInputType(Object o) { 
    } 
} 
+0

을하는 데 도움이 당신의 목표가 무엇인지 더 자세히 설명해 주시겠습니까? 당신의 타입'bollean.edm'에 대해서 알아야 할 것은 무엇입니까? – user905686

+0

이 형식이 문자열로 제공되어야하는 문제라고 생각하지 않습니다. btw 이것은 Odata 형식입니다. –

답변

1

this에 따르면, 그것은 당신 신비한 Odata type에 문서처럼 보인다. (어떤 단지 표준 java.lang.classes 그 Odata type-에서 String typeName 값을 변경) 더 많은 이하 작업 sollution은 다음과 같아야합니다) :

public class Test { 
    public static void main(String[] args) throws InterruptedException { 
      String typeName = "Edm.Double"; 
      String namePreparedForEncoding = typeName.replace('.', '_'); 
      Type type = Type.valueOf(namePreparedForEncoding); 
      System.out.println(type); 

      String memberValue = "42.99"; 
      SwitchInputType<?> value = type.makeType(memberValue); 
      System.out.println(value); 

      String typeName1 = "Edm.Int32"; 
      String namePreparedForEncoding1 = typeName1.replace('.', '_'); 
      Type type1 = Type.valueOf(namePreparedForEncoding1); 
      System.out.println(type1); 

      String memberValue1 = "42"; 
      SwitchInputType<?> value1 = type1.makeType(memberValue1); 
      System.out.println(value1); 
    } 

    enum Type { 
     Edm_Boolean { 
      SwitchInputType makeType(String memberValue) { 
       return new SwitchInputType<Boolean>(new Boolean(memberValue)); 
      } 
     }, 
     Edm_Double { 
      SwitchInputType makeType(String memberValue) { 
       return new SwitchInputType<Double>(new Double(memberValue)); 
      } 
     }, 
     Edm_Int32 { 
      SwitchInputType makeType(String memberValue) { 
       return new SwitchInputType<Integer>(new Integer(memberValue)); 
      } 
     }; 

     // All must do this. 
     abstract SwitchInputType makeType(String memberValue); 
    } 

    static class SwitchInputType<T> { 
     private Object o; 

     public SwitchInputType(Object o) { 
      this.o = o; 
     } 

     @Override 
     public String toString() { 
      return "SwitchInputType: " + o.toString(); 
     } 
    } 
} 

출력 :

Edm_Double 
SwitchInputType: 42.99 

Edm_Int32 
SwitchInputType: 42 

로를 당신은 열거 형에서 으로 Edm.을 대체했습니다. 왜냐하면 열거 형은 midlle에서 점으로 된 이름이 될 수 없기 때문입니다.

PS :

public String toString() { 
     return String.format("SwitchInputType: (%s) %s", o.getClass().getSimpleName(), o); 
    } 

결과 : 당신이 조금 toString() 방법을 변경하는 경우

것은 당신이 변환이 정말 작동하는지 확인 될 것입니다 SwitchInputType: (Double) 42.99

희망이 당신에게

+0

dantuch - 감사합니다! –

관련 문제