2012-12-22 4 views
0

코딩하는 동안 열거 형을 읽는 것이 정말 좋습니다. 최근에 나는 키워드 목록을 받아 들일 필요가 있고 각각이 하나의 행동을 수행 할 작업을 발견했다.열거 형 설계 지침이 필요합니다.

예 키워드 : 이 String whatImGoingToMake = Keywords.BREAKFAST("banana").getPopularRecipe(); 생각이 여기에이 성분으로 바나나와 함께 인기있는 아침 식사 요리법을 얻을 수 있습니다 : 아침 식사, 점심 식사, 저녁 식사

그래서 내가하고 싶은는 다음과 같이 쓸 수있다. 나는 그것이 작동 할 수 있어야 반사를 사용하여 생각한 이후로 이것을 생각했습니다.

문제는 정적이 아니기 때문에 getPopularRecipe()를 호출 할 수 없으며 내부 클래스에는 허용되지 않는다는 것입니다.

저는 정답입니다. 열거 형이 이와 같이 뭔가를하고 대신 클래스를 사용하도록 강요하지 않는 것이 맞습니까? 다음 코더가 가장 쉽게 이해할 수 있도록 구현하는 방법은 무엇입니까?

어쩌면 늦은 것이기 때문에이 시점에서 고민 중입니다.

나는 가능한 한 많은 IF 문 또는 switch 문을 사용하지 않기 위해 노력하고 있습니다. 나는 그 (것)들을보고 모든 희생을 치르면서 그들을 피하는 것을 좋아하지 않는다. 그래서 같은 것을 쓰고 싶지 않아 : 내가 제대로 질문을 이해한다면, 당신은 abstract이 필요



    public enum MyUtil { 
     BREAKFAST { 
      public String getPopularRecipe(String ingredient) { 
       //do something with ingredient 
       return recipe; 
      } 
     }, 
     LUNCH { 
      public String getPopularRecipe(String ingredient) { 
       //do something with ingredient 
       return recipe; 
      } 
     } 
    } 

+0

때때로 if 문이 올바른 선택이고 아무런 해가 없습니다 그들을 사용하여. – Swapnil

+0

마지막 예를 잘못 들었습니까? 그것은 당신이하고 싶은 것을 완벽하게 허용합니다. – tcb

+0

아마 C#에서 내 배경으로 인해,이 '열거 형'같지 않습니다. ('Keywords.BREAKFAST ("banana")'어떻게 함수 호출이라고 생각하는지) –

답변

3

: 여기



    if (param.equals("BREAKFAST") { 
     //lookup in breakfast db 
    } else if (param.equals("LUNCH") { 
     //you get the idea - I dont like this since it can go on forever if we start adding BRUNCH, SUPPER, SNACK 
    } 

하면 열거 작업을 얻기에 그 임 관심 메서드 getPopularRecipe()이 Enum이며 모든 열거 형 인스턴스가 재정의되어야합니다.

예 :

public enum MyUtil { 
     BREAKFAST { 
      @Override 
      public String getPopularRecipe(String ingredient) { 
       //do something with ingredient 
       return recipe; 
      } 
     }, 
     LUNCH { 
       @Override  
      public String getPopularRecipe(String ingredient) { 
       //do something with ingredient 
       return recipe; 
      } 
     } 
     public abstract String getPopularRecipe(String ingredient); 
    } 

이 (끝까지 읽기) 추가 정보를 원하시면이 tutorial를 참조하십시오.

0

당신은 복잡한 일에 걸쳐 있습니다

public enum Meal { 
    BREAKFAST("Bacon and eggs"), 
    LUNCH("Salad"), 
    DINNER("Steak and veg"); 
    private final String ingredient; 
    Meal(String ingredient) { 
     // do whatever you like here 
     this.ingredient = ingredient; 
    } 
    public String getPopularRecipe() { 
     return ingredient; 
    } 
} 

생성자, 필드 및 방법은 일반 클래스의 경우와 같은 복잡 할 수 있습니다. 열거 형은 많은 사람들이 인식하는 것보다 일반 클래스와 훨씬 유사합니다. 그들은 심지어 불변하지도 않습니다. (팬터 노트 : 참조는 최종적이지만 인스턴스는 어떤 클래스처럼 변경할 수 있습니다. 예 : 열거 형은 setter 메서드 등을 가질 수 있습니다.)