Interessehalber geselle ich mich der Diskussion hinzu. Prinzipiell gäbe noch als Lösungsmöglichkeit Reflections.
Kleines Beispiel (kein Anspruch auf Richtigkeit, Vollständikeit usw.):
public class MethodReflection {
public static class DefaultEntity {
}
public static class DefaultEntityDao {
public void save(DefaultEntity defaultEntity) { }
public void update(DefaultEntity defaultEntity) { }
public void delete(DefaultEntity defaultEntity) { }
}
public DefaultEntityDao getDefaultEntityDAO() {
return new DefaultEntityDao();
}
public void doSomething(Object entity) throws
[COLOR="Red"]SecurityException[/COLOR],
[COLOR="#ff0000"]NoSuchMethodException[/COLOR],
[COLOR="#ff0000"]IllegalArgumentException[/COLOR],
[COLOR="#ff0000"]IllegalAccessException[/COLOR],
[COLOR="#ff0000"]InvocationTargetException[/COLOR] {
String daoMethodName = "get".concat(entity.getClass().getSimpleName()).concat("DAO");
Method daoMethod = MethodReflection.class.getMethod(daoMethodName, new Class[] {});
Object dao = daoMethod.invoke(this, new Object[] { });
Method saveMethod = dao.getClass().getMethod("save", entity.getClass());
Method updateMethod = dao.getClass().getMethod("update", entity.getClass());
Method deleteMethod = dao.getClass().getMethod("delete", entity.getClass());
saveMethod.invoke(dao, new Object[] { entity } );
updateMethod.invoke(dao, new Object[] { entity } );
deleteMethod.invoke(dao, new Object[] { entity } );
}
}
Wie sinnvoll eine solche Lösung ist, bleibt hinsichtlich verschiedener Kriterien (Lesbarkeit, Naming Conventions, Sicherheit, Robustheit etc.) dahingestellt. Ich würde davon absehen. Persönlich nutze ich, wie bereits vorhergehend erwähnt, Generics und Interfaces.
Gruß