2017-01-05 7 views
1

저는 해당 열거 형의 별칭으로 열거 형 인스턴스에 액세스하려는 유스 케이스가 있습니다.자바에서 열거 형에 별칭을 추가하십시오.

별칭을 사용하여 enum 인스턴스에 액세스하려는 이유는 영어 이외의 문자가 포함 된 enum 값에 액세스 할 수 있도록 허용하는 것입니다. 특정 용도는 히브리어입니다.

이것은 프레임 워크의 일부이며, 주어진 enum에 여러 개의 별칭을 추가 할 수 있어야합니다. 주어진 별칭이 명세 (gauge-java)의 일부로 사용되는 것처럼보다 자연스러운 언어를 허용해야합니다.

올바르게 수행하는 방법에 대한 제안 사항이 있으십니까?

편집 : 나는 예를 들어 추가 해요 :

이동을 "בית"이 방법에 매핑 될 것 단계

:

@Step("Go to <page>") 
public void goToPage(Page page) {...} 
+2

요구 사항이 분명하지 않습니다 (적어도 저에게). 여기서 달성하고자하는 의사 코드를 공유 할 수 있습니까? – Mureinik

+0

다음과 같이 할 수 있습니다 :'enum E {A, B; 정적 최종 E C = A, D = B; }'. 또는 문자열 별칭과지도 조회를 사용할 수 있습니다. – shmosel

+0

@Mureinik Well 게이지는 자연 언어로 작성된 실행 사양을 작성하는 것을 허용하기위한 것입니다. 이와 같이 저는 '페이지에서'집에 "할 일"을 허용하고 싶습니다. 그 서명이있는 메서드에 매핑됩니다 : @Step ("에서 작업") 공개 무효 doStuffInPage (페이지 페이지) 하지만 내 경우에는 히브리어로 페이지가 필요합니다. 그러므로 enum에 대한 별칭이 필요합니다. –

답변

1

열거 형 값은 가독성을 위해 사양에 적합하지 않으므로 읽기 가능한 값으로 바꿉니다. rds. (

public class MyEnumUtil { 

    private MyEnumUtil() {} 

    public static MyEnum fromHerbew(String stringValue) { 
     switch (stringValue) { 
      case "צָפוֹן,": return MyEnum.NORTH; 
      case "מזרח,": return MyEnum.EAST; 
      case " מַעֲרָב,": return MyEnum.WEST; 
      case "  דָרוֹם": return MyEnum.SOUTH; 
      default: return null; 
     } 
    } 
} 

이 그런 다음 단계가 될 것입니다 : documentation에 따르면 당신은 단계 매개 변수로 열거를 전달할 수 있지만, 당신이 원하는대로 당신의 경우에 당신은 문자열을 전달할 수 있습니다 다음 단계 방법 단지 공장 클래스를 사용하여 문자열에서 열거를 만들 물론 Herbew에서)

@Step("Navigate towards <directionString>") 
public void navigate(String directionString) { 
    MyEnum direction = MyEnumUtil.fromHerbew(directionString); 
    // use enum 
} 
+0

그래,하지만 프레임 워크 측면에서 나는 사용자가 그것을 할 필요가 없게하고 싶습니다. 그때 그 상용구 코드를 작성하지 않고도이 기능을 허용 할 수있는 솔루션을 만들고 싶습니다. –

+0

전체 그림이 보이지 않지만이 경우 별칭을 속성 파일로 옮기고 Herbew 변형을 실제 enum 값으로 매핑 할 수 있습니다. –

+0

그래,하지만 그것은 프레임 워크에서 기대할 수있는 우아한 해결책은 아닙니다. 나는 프레임 워크 (개발자)의 사용자가 그 기능을 사용하기 위해 가능한 적은 코드 (속성 파일과 같은 파일이 더 나쁘다)로 작성해야하는 솔루션을 원합니다. –

0

열거 형 정적 및 인스턴스 필드를 포함하고 다른 클래스처럼 생성자를 가질 수 있습니다

enum Foo { 
    A("alias1", "alias2"), 
    B("alias3"); 

    private static final Map<String, Foo> gAliases = new HashMap<>(); 

    private Foo(String... aliases) { 
     for(final String alias : aliases) { 
      gAliases.put(alias, this); 
     } 
    } 

    public static Foo forAlias(String alias) { 
     return gAliases.get(alias); 
    } 
} 

또한 생략 할 수있다 정적 초기화 프로그램에서 별칭 맵을 생성하고 채 웁니다. 하지만 생성자가 어떤 별칭이 어떤 상수와 일치 하는지를 읽고 유지하는 방법을 쉽게 좋아합니다.

+0

네, 저도 알고 있습니다. 그러나 Enum에 적합한 솔루션이 필요합니다. 정적 메서드는 여러 Enum을 한꺼번에 처리 할 수있는 솔루션이 아닙니다. –

+0

@BoazBerman 여러 열거 형에 대한 별칭을 매핑하면 열거 형에서 제공하는 강력한 형식 지정의 목적을 무력화하는 것처럼 보입니다. –

+0

열거 형은 인터페이스를 구현할 수도 있으므로 동일한 인터페이스를 구현하는 여러 열거 형을 가질 수 있으며 일부 유틸리티 클래스에 별칭 맵을 배치 할 수 있습니다. –