为什么 EMF 中的 eGet 返回 Object 而不是 EObject?

发布于 2024-08-27 03:06:29 字数 517 浏览 10 评论 0原文

我正在使用 Java 中的 EMF 框架编写一些代码,但它确实很难使用,例如我无法在 EMF 之上实现类似 OCL 的查询 API,而 EMF 是类型安全的。

原因之一是 EStructuralFeatureeGet() 仅返回一个 Object,而不是 EObject。因此,我编写的任何内容都必须使用大量空检查、类型检查和类型转换,这是不安全的、不高性能的,并且不能以可重用的方式泛化。

为什么 EMF 不为任意 Object 值生成具有 EObject 包装器的虚拟实现?

即使使用简单的抛出 UnsupportedOperationException 来实现 EObjectEClass 接口确实很痛苦(API 太大)。 eContainer() 方法也是如此,这使得向上导航模型变得很痛苦。

I am working on some code using the EMF framework in Java, but it is really hard to use, e.g. I cannot implement OCL-like query API on top of EMF which would be type-safe.

One of the reasons is that eGet() for a EStructuralFeature returns just an Object, not EObject. So anything I would write must use much of null checking, type checking and type casting which is unsafe, not performant and cannot be generalized in a reusable way.

Why doesn't EMF generate dummy implementations with EObject wrappers for arbitrary Object value?

Implementing the EObject and hence the EClass interfaces even with simple throw UnsupportedOperationException is really a pain (the APIs are too big). The same holds for the eContainer() method which makes navigating the model upwards painful.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

南薇 2024-09-03 03:06:29

相同的方法用于访问简单属性值(可以是任何 Java 类型)并遍历与其他建模对象的关系,这些属性值可以是单值或多值。

EMF 提供了通用机制来检查对象是否是 EClass 的实例,或者 EClass 是否可分配给另一个对象,因此我并没有真正看到这有什么问题。

The same method is used for accessing simple attribute values (which can be of any Java type) and traverse relationships to other modeled objects, and those can be single or multivalued.

EMF provides generic mechanisms for checking whether an object is an instance of an EClass, or if an EClass is assignable to another, so I don't really see the problem with that.

北陌 2024-09-03 03:06:29

eGet() 方法是 EMF 反射 API 的一部分。由于 EMF 可以包装任何可序列化对象,因此您无法限制此类反射 API 返回的对象。

为什么您需要使用这个反射 API,而不是您的 ecore 模型生成的 Java 实现?这样,您将拥有所有直接的类型良好的 API 来操作您的域对象。

The eGet() method is part of the EMF reflective API. As EMF can wrap any serializable object you cannot restrict the returned object of such a reflective API.

Why do you need to use this reflective API instead of the generated Java implementation of your ecore model? This way you will have all the direct well typed API to manipulate your domain objects.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文