2015-01-14 3 views
0

나는 지금형식으로 열거 형을 선언하는 방법?

public class Service 
{ 
    public static void setServiceMode(SERVICE_MODE mode) 
    { 

    } 
} 

열거로 인수를 갖는 기능을 포함하는 라이브러리을 만드는 오전, 나는 프로젝트 위의 라이브러리를 수입하고, "setServiceMode"를 호출이 함수는 다음과 같습니다.

Service.setServiceMode(SERVICE_MODE.LOGIN) 

내 문제는 열거 형 (SERVICE_MODE)을 선언해야하는 곳입니다. 라이브러리 함수 인수 및 열거 형 값은 프로젝트마다 다릅니다. 내 라이브러리를 변경하고 싶지 않습니다. 어떻게 자바에서 이것을 달성하기 위해?

+0

? 형식이 SERVICE_MODE 인 것 같습니다 – Stultuske

+0

라이브러리가 열거 형의 가능한 값을 알지 못하게하려면이 모든 것이 어떤 의미입니까? –

+0

내 프로젝트에서 다른 SERVICE_MODES로 비동기 네트워크 조회수를 치고 있기 때문에 라이브러리에서 처리 한 후 프로젝트의 응답이 필요하기 때문에이 작업이 필요합니다. 그래서 제 목적은 프로젝트에서 서비스를 호출하는 동안 전달한 enum service_mode를 사용하여 응답을받는 것입니다. –

답변

2

당신은 그 허용의 경우 라이브러리가 단지 어떤enum을 수용 할 수있다 :

public class Service { 

    public static <E extends Enum<E>> void setServiceMode(E mode) { 

    } 

    // Or a pre-generics version. 
    public static void setServiceMode2(Enum mode) { 

    } 
} 

public enum SERVICE_MODE { 

    LOGIN, 
    LOGOUT; 
} 

public void test() { 
    Service.setServiceMode(SERVICE_MODE.LOGIN); 
    Service.setServiceMode2(SERVICE_MODE.LOGIN); 
} 
+0

감사합니다,이 하나의 작품. –

1

SERVICE_MODE는 두 응용 프로그램

0

SERVICE_MODE 열거 클래스 경로에 있지 않는 한 귀하의 서비스 클래스가 컴파일되지 않습니다 공유 라이브러리에 포함해야합니다. 이러한 강력한 의존성 때문에 가장 좋은 아이디어는 해당 열거 형을 라이브러리에 추가하는 것입니다. 이 작업을 수행 할 수 없다면, 새 라이브러리를 작성하십시오. 그러면 새 라이브러리가 작성되며, 이는 사용자의 종속성이됩니다.

1

권장은 확장 열거 필요 인터페이스를 사용하는 것입니다. 다음은 적절한 유형 제약 조건을 제공하는 설정의 개요입니다. 정의, 열거를 라이브러리에서

interface ServiceMode<E extends Enum<E> & ServiceMode<E>> {} 

을 정의하고 클라이언트 코드에서

public static <E extends Enum<E> & ServiceMode<E>> void setServiceMode(E mode) {} 

로 게시 방법을 선언

enum MyServiceMode implements ServiceMode<MyServiceMode> {} 

ServiceMode 보장에 바인딩 유형이 수 setServiceMode에 전달 된 유형에 대한 추가 제한 조건이의 부속 유형임을 보장하는 경우에만이를 구현하는 enum에 의해 매개 변수화됩니다은 자체적으로 매개 변수화되었습니다. 나는 유형을 선언하는 방법을 ... 당신의 질문을 이해하지

관련 문제