適用於屬性值為有限集合的情況(如評分:好、中、差)。
Enumeration(如 Score),新增字面值並指定整數識別碼。Product 新增 score 屬性,型別選 Score。當需使用 EMF 未內建的 Java 類別(如 SWT 的 RGB),或整合 Legacy 代碼時使用。
Data Type(如 RGB),設 Instance Class 為 org.eclipse.swt.graphics.RGB。Product 新增 background 屬性,型別選 RGB。org.eclipse.swt 相依性。關鍵步驟: EMF 不知如何持久化自訂類型,需修改 ShopFactoryImpl:
public RGB createRGBFromString(EDataType eDataType, String initialValue) {
String[] values = initialValue.split(",");
return new RGB(
Integer.parseInt(values[0]),
Integer.parseInt(values[1]),
Integer.parseInt(values[2])
);
}
public String convertRGBToString(EDataType eDataType, Object instanceValue) {
RGB rgb = (RGB) instanceValue;
return rgb.red + "," + rgb.green + "," + rgb.blue;
}
持久化格式為 "255,90,150"。
EMF 以 EList 模擬 Map,需定義 MapEntry 類別:
StringToIntegerMapEntry,屬性 key(String)、value(Integer)。Instance Class Name = java.util.Map$Entry。Product)建立 包含關係(黑菱形)引用此 Entry,多重度 0..*。生成後,介面會出現:
EMap getSalesMap(); // key=String, value=Integer
編輯器中可新增鍵值對;程式碼使用 product.getSalesMap().put("2005-09", 100),注意值必須為 Integer 物件。
經過上述擴充,商店模型包含枚舉、自訂類型與 Map,結構更豐富完整。