1. lets start with reflection

public void draw(Shape e)
{
try
{
Method method = SpecialCanvas.class.getMethod(“draw”,
e.getClass());
return (String) method.invoke(this, e);
}
catch (java.lang.NoSuchMethodException noSuchMethodException)
{
// no need to log noSuchMethodException
log.error(e);
;
}
catch (Exception e1)
{
log.error( e1);
log.error(e);

}
}

I am not sure its that bad.
2. Regarding Generics I need to think it over.