2013-05-02 3 views
1

데이터를 다른 XML 출력 형식 (다른 JAXB 클래스)에 쓰는 클래스를 작성했습니다. 지원되는 모든 유형은 열거 형 (SupportedTypes)에 저장됩니다. Enum은 해당 JAXB 클래스를 저장합니다. 열거 형은 다음과 같습니다열거 형에서 일반 형식에 대한 매핑

public enum Types { 
/** 
* Invoice from hospitals. 
*/ 
Type1(...generatedClasses.invoice.hospital400.request.RequestType.class), 
/** 
* Invoice from hospital but with MediData's quality extensions. The 
* response has no extensions. 
*/ 
Type2(...generatedClasses.invoice.hospital400_QO.request.RequestType.class); 

/** 
* Class for request. represents the root element in corresponding xml. 
*/ 
private Class<?> rType; 

/** 
* 
* @param requestType 
*   class of corresponding request type 
*/ 
private InvoiceTypes(final Class<?> requestType) { 
    this.requestType = requestType; 
} 

/** 
* @return the requestType 
*/ 
public final Class<?> getRequestType() { 
    return requestType; 
} 

} 

내 문제는 JAXBElement 첨부와 같이 입력 제네릭 인스턴스를이 유형을 사용하는 방법입니다. typeEnum은 매개 변수로 주어지며 JAXBElement를 만들고 싶지만 분명히 작동하지 않습니다. 이제 막 갇혀 있습니다. 그러한 생성자 또는 메소드를 작성하는 방법. 다른 유형을 지원

는 ("ClassForTypes을") 클래스를 생성 가정하자 - 그들 (TheirClass, SpecialClass, MyClass에)와 함께 수행 무엇 이건 : 사전에

들으 해명

편집. API는 해당 클래스를 게시하지 않고 (매우 구체적 임) 대신 클래스의 유형 (TheirClass, SpecialClass, MyClass)을 저장하는 "TypeEnum"(TypeOne, TypeTwo, TypeThree)을 게시합니다. ClassForTypes의 생성시 지정된 TypeEnum을 사용하여 List<type saved in enum>을 생성합니다. 어떻게 그런 ClassForTypes를 만들거나 그것의 생성자인가?

일부 예제 코드 (작동하지 않습니다) : 나는이 방법을 사용하려면 위에서 열거 형 :

public class Blub{ 

    public Blub(Types type){ 
     List<type.getRequestType> typedList = new ArrayList... 
    } 

} 

이 작동하지 않습니다. 그러나 목록의 유형은 컴파일 타임에 알려져 있습니다 (열거 형에 저장되어 있기 때문에?). 정적으로 형식을 저장하고 형식이 지정된 일반을 가져 오는 데 사용할 수있는 방법이 있습니까? api 사용자가 열거 형을 통해 전달되는 "지원되는 유형"에 대해서만 알고 있어야하는 단일 요청 유형에 대해 알고 싶어하지 않습니다.

+0

죄송합니다. 아직 달성하고자하는 것이 분명하지 않습니다. 작동하지 않는 코드를 게시하면 클릭하게 될 것입니다. 내가했던 것처럼 코드를 최소한으로 줄이십시오. – OldCurmudgeon

답변

0

귀하가하고자하는 것이 정확히 무엇인지 명확하지 않습니다. enum에 기능을 추가하려고합니까? 이 같은?

public enum Types { 
    Type1(String.class) { 
    @Override 
    public Object make() { 
     return new String(); 
    } 
    }, 
    Type2(Integer.class) { 
    @Override 
    public Object make() { 
     return new Integer(0); 
    } 
    }; 

    private Class<?> rType; 

    Types(final Class<?> requestType) { 
    this.rType = requestType; 
    } 

    public final Class<?> getRequestType() { 
    return rType; 
    } 

    // All types must have a make method. 
    public abstract Object make(); 
} 
+0

enum에 기능이 없습니다 - 내 질문을 편집 할 것입니다 ... – dermoritz

+0

내 게시물을 편집했습니다 - 이제 더 명확 해지기를 바랍니다 (그러나이 경우 자바에서는 깨끗한 방법이 없다고 생각하십니까?!) – dermoritz

관련 문제