Khung mô hình hóa Eclipse có một ý tưởng thú vị cũng xem xét tính kế thừa. Khái niệm cơ bản được định nghĩa trong giao diện Switch : chuyển đổi được thực hiện bằng cách gọi phương thức doSwitch .
Điều thực sự thú vị là việc thực hiện. Đối với mỗi loại sở thích, một
public T caseXXXX(XXXX object);
phương thức phải được thực hiện (với việc thực hiện mặc định trả về null). Việc triển khai doSwitch sẽ cố gắng gọi al các phương thức caseXXX trên đối tượng cho tất cả hệ thống phân cấp kiểu của nó. Một cái gì đó trong dòng:
BaseType baseType = (BaseType)object;
T result = caseBaseType(eAttribute);
if (result == null) result = caseSuperType1(baseType);
if (result == null) result = caseSuperType2(baseType);
if (result == null) result = caseSuperType3(baseType);
if (result == null) result = caseSuperType4(baseType);
if (result == null) result = defaultCase(object);
return result;
Khung thực tế sử dụng một id số nguyên cho mỗi lớp, vì vậy logic thực sự là một chuyển đổi thuần túy:
public T doSwitch(Object object) {
return doSwitch(object.class(), eObject);
}
protected T doSwitch(Class clazz, Object object) {
return doSwitch(getClassifierID(clazz), object);
}
protected T doSwitch(int classifierID, Object theObject) {
switch (classifierID) {
case MyClasses.BASETYPE:
{
BaseType baseType = (BaseType)object;
...
return result;
}
case MyClasses.TYPE1:
{
...
}
...
Bạn có thể xem xét một triển khai hoàn chỉnh của ECoreSwitch để có được ý tưởng tốt hơn.