EMF的一些总结(1)——关于Packages and Factories

本文介绍了如何使用EPackage和EFactory类访问和创建EMF模型实例。通过这两种类可以轻松地获取模型的元数据,例如EClass对象,并进一步访问模型的属性、引用等详细信息。文中还详细说明了两种获取EPackage对象的方法:一种是通过加载外部的.ecore文件,另一种则是利用包注册表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Packages and Factories
package和factory类帮助你访问模型的metadata,或者创建模型的实例。
通过package可以轻松的获得模型的EClass对象,如:
None.gifEClass purchaseOrderClass = epo2Package.getPurchaseORder();
例外还有一种方法也可以通过package类对象获得model的EClass对象,如:
None.gifEClass purchaseOrderClass =
None.gif  (EClass)epo2Package.getEClassifier(
"PurchaseOrder");
可以通过类似的方法访问模型的属性、引用还有其他更多的信息。
tip: EEnum是EDataType的子类
获得package对象的方法:
1.通过加载外部.ecore文件,从加载的Resource对象中获取,如:
None.gifResourceSet resourceSet = new ResourceSetImpl();
None.gifURI fileURI 
= URI.createURI("dot.gif/ExtendedPO2.ecore");
None.gifResource resource 
= resourceSet.getResource(fileURI, true);
None.gifEPackage epo2Package 
= (EPackage)resource.getContents().get(0);
None.gif
2.通过package registry来访问,package registry提供了namespace URIs到EPackage的映射关系。如果是插件方式的开发,通过定义扩展点可以在插件加载的时候把package对象注册到registry中,如:
None.gif<extension point="org.eclipse.emf.ecore.generated_package">
None.gif  
<package
None.gif     uri 
= "http:///com/example/epo2.ecore"
None.gif     
class = "com.example.epo2.EPO2Package" />
None.gif
</extension>
None.gif
如果不是插件开发方式,可以功过构造函数来将package注册到Registry实例中,如:
ExpandedBlockStart.gifContractedBlock.gifprotected EPackageImpl(String packageURI, EFactory factory) dot.gif{
InBlock.gif  
super();
InBlock.gif  Registry.INSTANCE.put(packageURI, 
this);
InBlock.gif  dot.gif
ExpandedBlockEnd.gif}

None.gif
注册后可以功过下面代码获得package对象:
None.gifEPackage.Registry.INSTANCE.getEPackage() 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值