On Tuesday, 21 February 2012 at 16:15:17 UTC, Juan Manuel Cabo wrote:
FileNotFoundException is the super class of the others so the first catch clause is enough. in fact, the others will
never be called if listed in the above order.

Nice! I missed that. But what if you want to add ErrorCode and Rainbows? And with your approach, one has to test for type and downcast, or
otherwise have multiple catch blocks (I don't want to miss plain
FileNotFoundExceptions). So it's square one.

With Variant[string] (or something equivalent, nothing better comes to mind)
one does:


    try {
        ...
    } catch (FileNotFoundException ex) {
         if (ex.hasInfo(MyNameConstant)) {
             ... use that ...
         }
         ... common handling ...
    }


--jm

Regarding the downcast - you still perform a check in the code above! You gained nothing by replacing a type check with a check on a hash.

Regarding composition of several traits - even that simple snippet is enough: throw new WithRainbows!withErrorCode!withFoobar!FileNotFoundException(...);

That's without further design which could probably improve this further.

Reply via email to