我有兩個枚舉描述兩個UML配置文件(意思是它們定義配置文件包含的原型)。Java:使用兩個不同枚舉的方法幾乎相同的兩個類;可以避免冗餘? (靜態方法無處不在)
我也有兩個實用工具類,在每個配置文件中使用幾乎相同的方法。
實施例:
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 Modeling Framework或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));
}
爲什麼兩個枚舉?如果我們從根本上談論類別和子類別,那麼只需將笛卡爾產品打包成一個枚舉類型,或者(更好的是,恕我直言),只需使用「近似重複」代碼......這只是一個(簡短)方法,是的? – corlettk 2011-05-27 08:40:50
當你的Enums實現相同的接口時,什麼都不起作用? – joe776 2011-05-27 08:45:26
@ 1:不完全的,Utility類有幾種方法,我只發佈了一個例子。 – danowar 2011-05-27 09:28:38