我有两个枚举描述了两个 UML 配置文件(意味着它们定义了配置文件包含的原型)。
我还有两个实用程序类,它们具有在每个配置文件上工作的几乎相同的方法。
例子:
public static List<Element> getStereotypedElements(final InsertProfileHere stereo, final Package pkg) {
List<Element> extendedElements = new ArrayList<Element>();
if (isProfileApplied(pkg)) {
if (hasStereotype(stereo, pkg)) {
extendedElements.add(pkg);
}
extendedElements.addAll(getStereotypedElements(stereo, pkg.allOwnedElements()));
}
return extendedElements;
}
, 其中InsertProfileHere可以替换为两个配置文件枚举中的每一个。
如果有人感兴趣,此方法使用 Eclipse 建模框架,或者更确切地说是 EMF 中的 UML2 元模型实现。
无论如何,我想合并这两个实用程序类以避免冗余代码。
我试过了:
- 两个配置文件的超级界面
- 由于静态方法而不起作用
- 实用程序类的抽象类
- 由于静态方法而不起作用
- 将配置文件枚举封装在一个类中
由于某种原因,每种方法都不起作用。
有人有什么想法吗?
编辑:
另一种实用方法的示例:
public static boolean hasStereotype(
final InsertProfileHere stereo, final Element elem) {
for (Stereotype appliedStereo : elem.getAppliedStereotypes()) {
if (stereo == null) {
if (InsertProfileHere.contains(appliedStereo)) {
return true;
}
} else if (stereo.isEqual(appliedStereo)) {
return true;
}
}
return false;
}
EDIT2:并且为了很好地衡量配置文件枚举的实施部分
public enum Profile1 {
STEREOTYPE1 ("readable stereotype1 name"),
STEREOTYPE2 ("readable stereotype2 name"),
STEREOTYPE3 ("readable stereotype3 name"),
public static final String PROFILE_NAME = "NameOfProfile";
private final String readableName;
private Profile1(final String newName) {
readableName = newName;
}
public static Profile1 getValue(final String name) {
for (Profile1 type : Profile1.values()) {
if (type.toString().equals(name)) {
return type;
}
}
return null;
}
public static boolean contains(Stereotype stereotype) {
return (stereotype.getProfile().
getDefinition().getNsURI().contains(PROFILE_NAME));
}