2010-03-29 2 views
1

Java에서 EMF 프레임 워크를 사용하는 일부 코드로 작업하고 있지만 실제로 사용하기가 어렵습니다. 형식 안전 형 EMF 위에 OCL과 유사한 쿼리 API를 구현할 수 없습니다.EMF의 eGet이 EObject가 아닌 Object를 반환하는 이유는 무엇입니까?

EStructuralFeature의 경우 eGet()EObject이 아니라 단지 Object을 반환합니다. 그래서 내가 쓰는 것은 아무것도 안전하지 않고, 성능이없고 재사용 가능한 방식으로 일반화 될 수없는 널 검사, 유형 검사 및 유형 캐스팅을 많이 사용해야합니다.

EMF가 임의의 Object 값에 대해 EObject 래퍼로 더미 구현을 생성하지 않는 이유는 무엇입니까?

간단한 던짐 UnsupportedOperationException으로도 EObject 인터페이스와 따라서 EClass 인터페이스를 구현하는 것은 정말 고통 스럽습니다 (API가 너무 큽니다). 모델을 위쪽으로 힘들이지 않게 만드는 eContainer() 방법에 대해서도 마찬가지입니다.

+0

EMF는 자바의 원시 타입과 그 객체에 상응하는 래퍼를 가지고 있다는 것을 깨달았지만, 여전히 객체를 반환하는 API가 남아 있습니까? –

답변

3

단순한 속성 값 (모든 Java 유형이 될 수 있음)에 액세스하고 다른 모델링 된 객체와의 관계를 트래버스하는 데 같은 방법이 사용되며, 단일 또는 다중 값일 수 있습니다.

EMF는 개체가 EClass의 인스턴스인지 여부를 확인하거나 EClass를 다른 개체에 할당 할 수 있는지 여부를 확인하기위한 일반적인 메커니즘을 제공하므로이 문제를 실제로 볼 수 없습니다.

+1

BTW, EMF 뉴스 그룹보다이 질문에 더 좋은 곳은 없습니다. http://www.eclipse.org/forums/index.php?t=thread&frm_id=108 – user48945

+0

여전히 저의 첫 번째 인상은 Java와 다르지 않다는 것입니다 원시 타입과 autoboxing없이. 나는 현명한 의견을 내기 위해 약간의 사고와 프로그래밍을 할 것입니다. –

1

eGet() 메서드는 EMF 리플렉션 API의 일부입니다. EMF는 직렬화 가능한 객체를 래핑 할 수 있으므로 이러한 반사 API의 반환 된 객체를 제한 할 수 없습니다.

ecore 모델의 생성 된 Java 구현 대신이 리플렉션 API를 사용해야하는 이유는 무엇입니까? 이렇게하면 도메인 객체를 조작하기 위해 모든 직접 잘 형식화 된 API를 갖게됩니다.

+0

Eclipse Xtext를 사용하고 있으며 문법에 임의의 모델 요소를 정의 할 수 없습니다 (예 : 입력 된 부모 연결). Xtext (자바 코드)에서 일부 서비스를 작성할 때 모델을 트래버스해야하지만 실제 연결이 없으면 반사 API를 사용해야하고 상당히 많이 캐스팅해야합니다. eGet 반환 객체를 사용하면 나를 처리 할 수있는 멋진 일반 코드를 작성할 수 없습니다. –

관련 문제