是否可以在 Eclipse/EMF 中将操作参数建模为可变参数?
Is it possible to model operation parameters as vararg in Eclipse/EMF?
我正在尝试寻找一种方法来为具有可变参数输入参数的操作建模。
模型应生成如下所示的界面。
/**
* ...
* @generated
*/
public interface Content extends EObject {
/**
* ...
* @generated
*/
List<Definition> getDefinitionsByLabels(String... label);
}
请不要回答变通方法,因为我正在尝试更新现有(大型)代码库的模型(那是 "manually" 进一步开发 post 代)。
到目前为止,调查这件事看起来并不乐观,但我不想在这里不问就放弃这方面的问题。
由于EMF的代码生成器不直接支持可变参数,所以有人要求将上限作为可变参数的标记。
错误报告待定,即请求的功能不可用:
https://bugs.eclipse.org/bugs/show_bug.cgi?id=337052
如果您想要的是模型 class 上的可变参数 Java 方法 ,而您 不需要正确的EMF操作,则可以解决:
使您的模型 class 实现一个 Java 接口,其中声明了 vararg 方法。
Java 文件:
public interface InterfaceWithVarargMethod {
public void varArgMethod(String... arg);
}
核心文件:
@GenModel(modelDirectory="/EMF_Trying/src-gen")
package emf_trying
interface InterfaceWithVarargMethod wraps InterfaceWithVarargMethod {}
class ModelObject extends InterfaceWithVarargMethod {
}
将生成不带 var-arg 方法的 ModelObjectImpl
的实现。您必须编辑生成的代码并为要编译的代码添加 var-arg 方法:
public class ModelObjectImpl extends MinimalEObjectImpl.Container implements ModelObject {
/**
* @generated NOT
*/
@Override
public void m(String... arg) {
// Implementation of var-arg method
}
...
}
也许可以找到此解决方案的一些变体,您不必编辑生成的代码。例如通过在接口中添加该方法的默认实现,然后在手写的子class中覆盖该方法到EClass.
我正在尝试寻找一种方法来为具有可变参数输入参数的操作建模。
模型应生成如下所示的界面。
/**
* ...
* @generated
*/
public interface Content extends EObject {
/**
* ...
* @generated
*/
List<Definition> getDefinitionsByLabels(String... label);
}
请不要回答变通方法,因为我正在尝试更新现有(大型)代码库的模型(那是 "manually" 进一步开发 post 代)。
到目前为止,调查这件事看起来并不乐观,但我不想在这里不问就放弃这方面的问题。
由于EMF的代码生成器不直接支持可变参数,所以有人要求将上限作为可变参数的标记。 错误报告待定,即请求的功能不可用: https://bugs.eclipse.org/bugs/show_bug.cgi?id=337052
如果您想要的是模型 class 上的可变参数 Java 方法 ,而您 不需要正确的EMF操作,则可以解决:
使您的模型 class 实现一个 Java 接口,其中声明了 vararg 方法。
Java 文件:
public interface InterfaceWithVarargMethod {
public void varArgMethod(String... arg);
}
核心文件:
@GenModel(modelDirectory="/EMF_Trying/src-gen")
package emf_trying
interface InterfaceWithVarargMethod wraps InterfaceWithVarargMethod {}
class ModelObject extends InterfaceWithVarargMethod {
}
将生成不带 var-arg 方法的 ModelObjectImpl
的实现。您必须编辑生成的代码并为要编译的代码添加 var-arg 方法:
public class ModelObjectImpl extends MinimalEObjectImpl.Container implements ModelObject {
/**
* @generated NOT
*/
@Override
public void m(String... arg) {
// Implementation of var-arg method
}
...
}
也许可以找到此解决方案的一些变体,您不必编辑生成的代码。例如通过在接口中添加该方法的默认实现,然后在手写的子class中覆盖该方法到EClass.