Kerangka Pemodelan Eclipse memiliki ide menarik yang juga mempertimbangkan warisan. Konsep dasar didefinisikan dalam antarmuka Switch : switching dilakukan dengan memanggil metode doSwitch .
Yang benar-benar menarik adalah implementasinya. Untuk setiap jenis bunga, a
public T caseXXXX(XXXX object);
Metode harus diimplementasikan (dengan implementasi standar mengembalikan nol). The doSwitch implementasi akan mencoba untuk memanggil al caseXXX metode pada objek untuk semua jenis hirarki-nya. Sesuatu di baris:
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;
Kerangka kerja yang sebenarnya menggunakan id integer untuk setiap kelas, jadi logikanya sebenarnya adalah saklar murni:
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:
{
...
}
...
Anda dapat melihat implementasi lengkap ECoreSwitch untuk mendapatkan ide yang lebih baik.