Java 如何生成私有/受保护的方法&;使用EMF的变量?

Java 如何生成私有/受保护的方法&;使用EMF的变量?,java,eclipse,emf,Java,Eclipse,Emf,我希望使用基于UML模型的genmodel生成Java代码 我正在使用Papyrus的Eclipse Oxygen、UML模型(使用了Ecore概要文件),以便使用GenModel向导生成Ecore,最终生成模型Java代码(标准Eclipse插件) 我已将生成的源代码与手写的源代码分开,以避免使用@generated NOT+手动修改解决方案:) 无论我是否更改属性的UML可见性参数,生成的模型代码中都没有任何更改(所有内容都是公共的) 我在我读过的文档(EMF帮助,Vogella博客,opC

我希望使用基于UML模型的genmodel生成Java代码

我正在使用Papyrus的Eclipse Oxygen、UML模型(使用了Ecore概要文件),以便使用GenModel向导生成Ecore,最终生成模型Java代码(标准Eclipse插件)

我已将生成的源代码与手写的源代码分开,以避免使用
@generated NOT
+手动修改解决方案:)

无论我是否更改属性的UML可见性参数,生成的模型代码中都没有任何更改(所有内容都是公共的)

我在我读过的文档(EMF帮助,Vogella博客,opCoach博客,谷歌…)中没有找到关于这样做可能性的信息

我的问题是:

  • GenModel处理是否可能考虑UML对象的可见性
  • 这是否可以设置UML Ecore概要文件以强制生成代码的可见性?(到目前为止,我已经试过了,但没有成功)

据我所知,无法设置getter/setter的访问修饰符。我认为这里的主要问题是所有接口方法都必须是公共的,因此在生成的接口中不能有任何其他可见性。您通常不想直接向我们介绍实现类

您可以尝试从接口中删除getter/setter。显然有
suppressedGetVisibility
suppressedSetVisibility
genmodel注释来抑制接口中的getter和setter生成(
suppressedAssetVisibility
suppressedUnSetVisibility
也存在)。它们将只出现在实现类中

另一种选择可能是更改元模型并组合模型元素,以便它们实现两种不同类型的接口:一种用于描述公共API的公共接口,另一种用于内部API的内部接口。然后只向用户公开公共接口


这些选项当然不同于在UML中定义每个可见性,但可能适合您的用例

多亏了@Kapep,解决方案是查看应用于UML模型相应属性的EReference(或EAttribute(如果需要)构造型的
visibility
属性。此处所做的更改不会影响实现的生成,但会更改生成的界面中显示的内容:

  • 未指定(默认):存在setter和getter方法
  • :setter和getter方法不存在
  • 只读:仅显示获取者

然后,您就可以自由地使用人造代码来扩展生成的代码,以使用/显示getter和setter所需的方式

非常感谢,我将查看
suppressedGetVisibility
文档,看看是否可以通过UML模型进行设置!