¿Por EGET en los retornos EMF objeto en lugar de EObject?
-
22-09-2019 - |
Pregunta
Estoy trabajando en algo de código utilizando el marco de la FEM en Java, pero es realmente difícil de utilizar, por ejemplo, No puedo poner en práctica OCL-como API de consulta en la parte superior de la FEM que sería de tipo seguro.
Una de las razones es que eGet()
durante EStructuralFeature
vuelve sólo una Object
, no EObject
. Así que cualquier cosa que iba a escribir debe utilizar gran parte de la comprobación nula, la verificación de tipos y el tipo de colada que no es seguro, no performant y no se puede generalizar de forma reutilizable.
¿Por qué no generan campos electromagnéticos implementaciones ficticias con envolturas para EObject
valor Object
arbitraria?
La aplicación de la EObject
y por tanto las interfaces de EClass
incluso con UnsupportedOperationException
sencilla tiro es realmente un dolor (las API son demasiado grandes). Lo mismo vale para el método eContainer()
que hace que la navegación por el modelo hacia arriba doloroso.
Solución
El mismo método se utiliza para acceder a valores de atributo simples (que puede ser de cualquier tipo Java) y relaciones de poligonal a otros objetos modelados, y los que puede ser simple o con varios valores.
EMF proporciona mecanismos genéricos para comprobar si un objeto es una instancia de un EClass, o si un EClass es asignable a otro, así que no veo el problema con eso.
Otros consejos
El EGET () es parte de la API reflectante EMF. Como EMF puede envolver cualquier objeto serializable no se puede restringir el objeto devuelto de un API tal reflectante.
¿Por qué es necesario utilizar esta API de reflexión en lugar de la aplicación Java generado de su modelo ecore? De esta manera usted tendrá toda la API directa bien escritos para manipular los objetos de dominio.